uva11922 - Permutation Transformer 伸展树

Langfuse实战:从评估打分到问题解决的完整指南 本文详细介绍了如何利用开源LLM工程平台Langfuse对AI应用进行系统性评估与优化。从创建评估数据集、设计自动化评分函数,到深入排查常见问题并关联Trace进行精准打分,提供了完整的实战指南。最后,探讨了如何利用评估结果驱动提示词迭代与A/B测试,并给出了生产环境部署与性能优化的关键考量,帮助开发者构建可测量、可分析、可改进的LLM应用。 阅读详情

Permutation Transformer 

Write a program to transform the permutation 1, 2, 3,..., n according to m instructions. Each instruction (a, b) means to take out the subsequence from the a-th to the b-th element, reverse it, then append it to the end.

Input 

There is only one case for this problem. The first line contains two integers n and m (1$ \le$n, m$ \le$100, 000). Each of the next m lines contains an instruction consisting of two integers a and b (1$ \le$a$ \le$b$ \le$n).

Output 

Print n lines, one for each integer, the final permutation.


Explanation of the sample below

Instruction (2,5): Take out the subsequence {2,3,4,5}, reverse it to {5,4,3,2}, append it to the remaining permutation {1,6,7,8,9,10}

Instruction (4,8): The subsequence from the 4-th to the 8-th element of {1,6,7,8,9,10,5,4,3,2} is {8,9,10,5,4}. Take it out, reverse it, and you'll get the sample output.


Warning: Don't use cin, cout for this problem, use faster i/o methods e.g scanf, printf.

Sample Input 

10 2
2 5
4 8

Sample Output 

1
6
7
3
2
4
5
10
9
8

  最开始排列1-N,有M条指令,每条指令(a,b)表示取出第a-b个元素,翻转后添加到排列尾部。

  用split操作把a之前的和整个串分开,再把剩下的串分成左边b-a+1个,剩下的在右边,这样就有了left,mid,right,把mid标记旋转,合并left和right,再和mid合并。

  旋转就和线段树一样,这里就是swap(ch[0],ch[1]),有标记的话要pushdown。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<utility>
#include<cstring>
#include<stack>
#include<queue>
#include<map>
#include<deque>
#include<cmath>
#include<map>
#define INF 0x3f3f3f3f
#define eps 1e-3
using namespace std;
typedef long long LL;
const int MAXN=100010;
const int MAXM=1030;
const int MOD=1000000007;

int N,M;

struct Node{
    Node* ch[2];
    int s;
    int v;
    int flip;

    int cmp(int k) const{
        int d=k-ch[0]->s;
        if(d==1) return -1;
        return d<=0?0:1;
    }
    void maintain(){
        s=ch[0]->s+ch[1]->s+1;
    }
    void pushdown(){
        if(flip){
            swap(ch[0],ch[1]);
            ch[0]->flip=!ch[0]->flip;
            ch[1]->flip=!ch[1]->flip;
            flip=0;
        }
    }
};

Node* null=new Node();

void rotate(Node*& o,int d){
    Node* k=o->ch[d^1];
    o->ch[d^1]=k->ch[d];
    k->ch[d]=o;
    o->maintain();
    k->maintain();
    o=k;
}
void splay(Node*& o,int k){
    o->pushdown();
    int d=o->cmp(k);
    if(d==1) k-=o->ch[0]->s+1;
    if(d!=-1){
        Node* p=o->ch[d];
        p->pushdown();
        int d2=p->cmp(k);
        int k2=(d2==0?k:k-p->ch[0]->s-1);
        if(d2!=-1){
            splay(p->ch[d2],k2);
            if(d==d2) rotate(o,d^1);
            else rotate(o->ch[d],d);
        }
        rotate(o,d^1);
    }
}
Node* merge(Node* left,Node* right){
    splay(left,left->s);
    left->ch[1]=right;
    left->maintain();
    return left;
}

//k>=1
void split(Node* o,int k,Node*& left,Node*& right){
    splay(o,k);
    left=o;
    right=o->ch[1];
    o->ch[1]=null;
    left->maintain();
}

struct SplaySequence{
    int n;
    Node seq[MAXN];
    Node* root;

    Node* build(int sz){
        if(!sz) return null;
        Node* L=build(sz/2);
        Node* o=&seq[++n];
        o->v=n;
        o->ch[0]=L;
        o->ch[1]=build(sz-sz/2-1);
        o->flip=0;
        o->maintain();
        return o;
    }
    void init(int sz){
        n=0;
        null->s=0;
        root=build(sz);
    }
};

vector<int> ans;
void print(Node* o){
    if(o!=null){
        o->pushdown();
        print(o->ch[0]);
        ans.push_back(o->v);
        print(o->ch[1]);
    }
}

SplaySequence ss;

int main(){
    freopen("in.txt","r",stdin);
    while(scanf("%d%d",&N,&M)!=EOF){
        ss.init(N+1);
        while(M--){
            int a,b;
            scanf("%d%d",&a,&b);
            Node *left,*mid,*right,*o;
            split(ss.root,a,left,o);
            split(o,b-a+1,mid,right);
            mid->flip^=1;
            ss.root=merge(merge(left,right),mid);
        }
        print(ss.root);
        for(int i=1;i<=N;i++) printf("%d\n",ans[i]-1);
    }
    return 0;
}



华为海思2026届数字IC秋招笔试高频考点解析与实战技巧(2025最新版) 本文深入解析华为海思2026届数字IC秋招笔试的高频考点与实战技巧,涵盖时序优化、低功耗设计、DFT规则等核心模块。针对2025年最新真题,提供详细的解题思路和工程经验,帮助考生高效备考。特别关注SystemVerilog约束随机测试等新增考点,助力考生在秋招笔试中脱颖而出。 阅读详情

相关推荐

Unity物理驱动3D汽车实现:从刚体控制到参数调优

在游戏开发中,刚体物理是实现真实物体运动与交互的核心技术。通过Unity的物理引擎,开发者可以模拟重力、碰撞、摩擦力等物理行为,为游戏世界注入真实感。其技术价值在于能够以符合物理规律的方式驱动游戏对象,避免穿墙、无视惯性等问题,从而提升游戏体验的真实性和沉浸感。这一原理广泛应用于角色控制、车辆模拟、物体破坏等场景。本文以3D小汽车为例,详细解析了如何通过Rigidbody组件施加力与扭矩,并利用C#脚本实现玩家输入逻辑,完成一辆可操控、能碰撞的物理驱动汽车。文中重点探讨了AddForce与角速度控制两种方案

weixin_34380948的博客 501

uva 11922 - Permutation Transformer(伸展树)

题目链接:uva 11922 - Permutation Transformer 题目大意:给定一个序列,每次操作取出区间a~b,翻转后放到末尾,随后输出序列。 解题思路:就是伸展树,对于每个节点设一个flip,表示是否为翻转转态。每次将a旋转到根,然后分裂,再将b翻转到根,分裂,然后将mid翻转放到最后。 #include #include #include using n

不慌不忙、不急不躁 1665

YooAsset可寻址模式避坑指南:从路径加载到Addressable的完整迁移方案

本文详细介绍了将Unity项目从传统路径加载迁移到YooAsset可寻址模式的完整方案。针对中大型项目在迁移过程中遇到的路径耦合、依赖管理、热更新等痛点,提供了从架构设计、环境配置、代码迁移到性能优化的实战指南,并分享了实际项目的改造案例与避坑经验,帮助团队高效完成资源管理系统的重构。

weixin_28304023的博客 500

UVa 11922 - Permutation Transformer 伸展树

第一棵伸展树,各种调试模板……TVT 对于 1 n 这种查询我处理的不太好,之前序列前后没有添加冗余节点,一直Runtime Error。 后来加上冗余节点之后又出了别的状况,因为多了 0 和 n+1 这两个节点,并且每次截取翻转添加到序列最后,因此无法确定 n+1 这个节点在序列的哪个位置。 比如(括号中的为添加的冗余节点): (0) 1 2 3 4 5 (6) 我把[3,4...

aegt43853的博客 129

20220601超简单百度地图街景图片爬取+绿视率计算

真的不难咯。

weixin_39676904的博客 1万+

SHP转TXT、TXT转SHP工具(附工具下载链接)

关于TXT,可以选择整个图层生成一个TXT。也可以勾选“每个地块单独存TXT”,然后选择一个字段,根据字段值,给每个地块生成一个TXT文件。支持选择和数据框一样的坐标系,也可以选择一个图层,工具会采用和这个图层一样的坐标系。1、TXT数据支持输入单个或者多个TXT文件,也可以直接选择TXT所在的文件夹。所有的TXT数据都生成到一个矢量数据图层。关于这一行的内容,可以在地块坐标行设置中进行设置。其他:①面节点闭合:勾选,则回到起点。属性描述:可以直接复制粘贴进来,也可以直接修改。也可以改为任意字母。

坐听风雨 4296

UVA 11922 Permutation Transformer(伸展树 Splay Tree)

题目大意:给你一个序列,1~n,m个操作,每个操作 a、b,就是把从第a个到第b个数字拿出来,翻转一下,放到后面,问你最终序列式多少? 思路:把a~b拿出来,再放回去,可以用伸展树的分裂,合并来做,翻转的话,就在每个节点上放一个延时标记 flip ,就像线段树一样,访问的时候push_down() 就行。 这里要注意,每次push_down() 要放在比较前面,因为比较是跟左儿子有关的,翻转会

沉溺的专栏 1436

AI算力瓶颈与系统优化实战指南

AI算力瓶颈已成为制约人工智能发展的关键因素,特别是在处理transformer类模型时,传统的冯·诺依曼架构面临严重的'内存墙'问题。通过硬件加速、系统优化和算法改进的三级策略,可以有效提升资源利用率。在嵌入式AI领域,结合量化、剪枝和专用指令集扩展等技术,能在资源受限设备上实现高效推理。这些优化方法在自动驾驶、工业视觉等场景中已展现出显著价值,推动AI应用从云端向边缘迁移。随着AI算力需求的持续增长,掌握系统优化技能将成为开发者的核心竞争力。

weixin_32597009的博客 339

【UVA】11922 Permutation Transformer 伸展树

题目分析:第一道splay!!!调了一天了终于tiao

poursoul 868

CCS8.1 导入CCS3.3工程方法

    CCS3.3作为开发人员使用最广开发工具,研究人员手上存在不少该版本的建立的程序版本,然而随着TI公司推出高级版本的CCS平台,在新的平台上集成了更加丰富的功能和优点。利用新版本的平台在开发和编译旧版本工程上可以节省大量时间和精力。在使用新版本开发3.3版本工程时,首要解决的就是加载3.3的工程文件,现将加载过程记录如下: 第一步:Project-&gt;Import Legacy CC...

1万+

浪潮服务器ESXI6.7部署实战:手动集成RAID驱动避坑指南

本文详细介绍了在浪潮服务器上部署ESXI6.7时手动集成RAID驱动的完整流程和避坑指南。从驱动获取、解压技巧到封装实战,逐步解决国产服务器常见的驱动缺失问题,特别针对PM8060 RAID卡提供具体解决方案,帮助IT运维人员顺利完成ESXI部署。

weixin_33725722的博客 461

UVA 11922 Permutation Transformer 伸展树

Write a program to transform the permutation 1, 2, 3,..., n according to m instructions. Each instruction(a, b) means to take out the subsequence from the a-th to the b-th element, reverse it, then

SCUT_Pein 1003

微信小程序码 createWxaCodeUnlimit 生成总是报错 41030 的解决方案

41030错误本质上就是路径不合法。路径多写了一个斜杠路径带了参数小程序版本未发布或 app.json 配置不一致。如果确认页面存在,可以通过来跳过检查。微信小程序 getUnlimitedQRCode 官方文档路径前不能加 /,参数放 scene,发布版本要有这个页面,不行就关掉 check_path。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 474

UVA 11922 Permutation Transformer —— splay伸展树

题意:根据m条指令改变排列1 2 3 4 … n ,每条指令(a, b)表示取出第a~b个元素,反转后添加到排列尾部 分析:用一个可分裂合并的序列来表示整个序列,截取一段可以用两次分裂一次合并实现,粘贴到末尾可以用一次合并实现。 翻转可以采用在每个结点上做标记的方法,flip = 1意味着将这棵子树翻转,可以类似线段树用一个pushdown()实现标记向下传递。 可以发现当前排列就...

weixin_38166557的博客 144

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

UVA 11922 Permutation Transformer(Splay【伸展树】的一些操作)

题目链接:https://cn.vjudge.net/problem/UVA-11922Write a program to transform the permutation 1, 2, 3, … , n according to m instructions. Each instruction (a, b) means to take out the subsequence from the

linlinsong—ACM界蒟水! 388

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

UVA 11922 Permutation Transformer 伸展树(模板)

题意:有个原始数列1,2,3..n,有m个指令,每个指令(a,b)表示取出第a~b个元素,翻转后添加到排列的尾部。 思路:白书上的例题,学过splay树后就不怎么难了,先贴个模板,需要注意的是得多加个0在原始数列前面,方便分裂序列。 #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt; using n...

ccsu_cat 222

UVA11922--Permutation Transformer (伸展树Splay)

题意:m条操作指令,对于指令 a b 表示取出第a~b个元素,翻转后添加到排列的尾部。 水题卡了一个小时,一直过不了样例。 原来是 dfs输出的时候 忘记向下传递标记了。 1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <al...

weixin_30872789的博客 124

UVA 11922 Permutation Transformer && SGU 187. Twist and whirl - want to cheat(伸展树)

题意:最开始有个序列{1,2,3,……,n},有m个操作,每个操作要把[a,b]这个区间翻转,然后添加到序列尾部。最后输出最终序列。 思路:伸展树第二题。。感觉对伸展树明白了一些,就是各种操作写的时候容易写错啊,转来转去有些晕。实现翻转可以把第a-1个元素旋转到根,把b+1旋转到根的右结点,此时b+1的左结点即为所要操作的区间,首先把这个子树删掉,翻转可以加个标记,表示这个区间被翻转过,然后把序

绝望的乐园 861

UVA_11922 Permutation Transformer 【splay树】

一、题目 UVA11922 二、分析 为什么会有伸展树? 伸展树与AVL的区别除了保持平衡的方式不同外,最重要的是在每次查找点时,让该点旋转到根结点,这里可以结合计算机里的局部性原理思考。 伸展树有什么优势? 有了伸展树,我们可以根据每次到根节点的值,根据二叉搜索树的性质,可以将整棵树划分成两个部分,左子树的值都比根结点值大,右子树的值都比根结点小。 该题除了伸展树还用到了什么? ...

weixin_30567225的博客 171

UVA11922 Permutation Transformer(SplayTree)

UVA11922  Permutation Transformer(SplayTree) 题意:你的任务是根据m条指令修改排列1,2,3…n.对于每条指令a和b,你必须把第a到b区间内的数翻转之后添加到排列尾部.最后输出整个排列即可. 分析:刘汝佳:训练指南P242例题.       直接建立Splay Tree,然后对排列执行操作即可.不过要注意split操作的k值不能为空,所以如果我

code 1422

Permutation Transformer UVA - 11922 splay分离合并翻转

题目链接:https://vjudge.net/problem/UVA-11922 白书P242 #include<cstdio> #include<algorithm> #include<vector> using namespace std; struct Node { Node *ch[2]; int s; int flip; ...

A 240

【splay tree】 UVA 11922 Permutation Transformer

题目中只有一种操作,把

yysys 851

uva 11922 Permutation Transformer(Splay tree,懒标记传递)

关于Splay tree网上

slowlight93的专栏 733

UVA11922 Permutation Transformer

Permutation Transformer Write a program to transform the permutation 1, 2, 3,..., n according to m instructions. Each instruction (a, b) means to take out the subsequence from the a-th to the b-th e

eeeaaaaa的专栏 678

UVA 11922 Permutation Transformer Splay

Description   Permutation Transformer  Write a program to transform the permutation 1, 2, 3,..., n according to m instructions. Each instruction (a, b) means to take out

Azarath Metrion Zinthos 798

uva 11922 Permutation Transformer

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=229&page=show_problem&problem=3073 题目描述:给你一个

pkwv 587

UVA 11922 Permutation Transformer(Splay Tree)

题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18902   【思路】        伸展树+打标记。        用伸展树维护这个序列,使得能够提供快速的分裂与合并O(logn),利用打标记的方法处理区间翻转的问题。        需要注意的有:     1)在splay与print中都需要合适

hahalidaxin的专栏 378
上一篇: 伸展树
下一篇: uva11996 - Jewel Magic 伸展树
小小小小葱
博客等级 码龄14年 22粉丝 266原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值