WIKIOI 3243 区间翻转
3243 区间翻转
题目描述 Description
给出N个数,要求做M次区间翻转(如1 2 3 4变成4 3 2 1),求出最后的序列
输入描述 Input Description
第一行一个数N,下一行N个数表示原始序列,在下一行一个数M表示M次翻转,之后的M行每行两个数L,R表示将区间[L,R]翻转。
输出描述 Output Description
一行N个数 , 表示最终序列。
样例输入 Sample Input
4
1 2 3 4
2
1 2
3 4
样例输出 Sample Output
2 1 4 3
数据范围及提示 Data Size & Hint
对于30%的数据满足n<=100 , m <= 10000
对于100%的数据满足n <= 150000 , m <= 150000
对于100%的数据满足n为2的幂,且L = i * 2^j + 1 , R = (i + 1) * 2^j
题解:
要不要这么卡时啊。。。不加inline就不能过?
代码:
- {$inline on}
- const maxn=+;
- var s,id,fa,a:array[..maxn] of longint;
- rev:array[..maxn] of boolean;
- c:array[..maxn,..] of longint;
- i,n,m,rt,x,y:longint;
- procedure swap(var x,y:longint);inline;
- var t:longint;
- begin
- t:=x;x:=y;y:=t;
- end;
- procedure pushup(x:longint);inline;
- begin
- s[x]:=s[c[x,]]+s[c[x,]]+;
- end;
- procedure pushdown(x:longint);inline;
- var l,r:longint;
- begin
- l:=c[x,];r:=c[x,];
- if rev[x] then
- begin
- swap(c[x,],c[x,]);
- rev[l]:=not(rev[l]);
- rev[r]:=not(rev[r]);
- rev[x]:=false;
- end;
- end;
- procedure rotate(x:longint;var k:Longint);inline;
- var l,r,y,z:longint;
- begin
- y:=fa[x];z:=fa[y];
- if c[y,]=x then l:= else l:=;r:=l xor ;
- if y=k then k:=x else c[z,ord(c[z,]=y)]:=x;
- fa[x]:=z;fa[y]:=x;fa[c[x,r]]:=y;
- c[y,l]:=c[x,r];c[x,r]:=y;
- pushup(y);pushup(x);
- end;
- procedure splay(x:longint;var k:longint);inline;
- var y,z:longint;
- begin
- while x<>k do
- begin
- y:=fa[x];z:=fa[y];
- if y<>k then
- begin
- if (c[z,]=y) xor (c[y,]=x) then rotate(x,k)
- else rotate(y,k);
- end;
- rotate(x,k);
- end;
- end;
- function find(x,rank:longint):longint;inline;
- var l,r:longint;
- begin
- pushdown(x);l:=c[x,];r:=c[x,];
- if s[l]+=rank then exit(x)
- else if s[l]>=rank then exit(find(l,rank))
- else exit(find(r,rank-s[l]-));
- end;
- procedure rever(l,r:longint);inline;
- var x,y:longint;
- begin
- x:=find(rt,l);y:=find(rt,r+);
- splay(x,rt);splay(y,c[x,]);
- rev[c[y,]]:=not(rev[c[y,]]);
- end;
- procedure build(l,r,f:longint);inline;
- var mid,now,last:longint;
- begin
- if l>r then exit;
- now:=id[l];last:=id[f];
- if l=r then
- begin
- fa[now]:=last;s[now]:=;
- c[last,ord(l>f)]:=now;
- exit;
- end;
- mid:=(l+r)>>;
- build(l,mid-,mid);build(mid+,r,mid);
- now:=id[mid];pushup(mid);
- fa[now]:=last;
- c[last,ord(mid>f)]:=now;
- end;
- procedure init;
- begin
- readln(n);
- for i:= to n do read(a[i]);readln;
- readln(m);
- for i:= to n+ do id[i]:=i;
- build(,n+,);rt:=(n+)>>;
- end;
- procedure main;
- begin
- for i:= to m do
- begin
- readln(x,y);
- rever(x,y);
- end;
- for i:= to n+ do write(a[find(rt,i)-],' ');
- end;
- begin
- assign(input,'input.txt');assign(output,'output.txt');
- reset(input);rewrite(output);
- init;
- main;
- close(input);close(output);
- end.
WIKIOI 3243 区间翻转的更多相关文章
- [BZOJ 3223 & Tyvj 1729]文艺平衡树 & [CodeVS 3243]区间翻转
题目不说了,就是区间翻转 传送门:BZOJ 3223 和 CodeVS 3243 第一道题中是1~n的区间翻转,而第二道题对于每个1~n还有一个附加值 实际上两道题的思路是一样的,第二题把值对应到位置 ...
- 区间翻转(codevs 3243)
题目描述 Description 给出N个数,要求做M次区间翻转(如1 2 3 4变成4 3 2 1),求出最后的序列 输入描述 Input Description 第一行一个数N,下一行N个数表示原 ...
- codevs3243 区间翻转
题目描述 Description 给出N个数,要求做M次区间翻转(如1 2 3 4变成4 3 2 1),求出最后的序列 输入描述 Input Description 第一行一个数N,下一行N个数表示原 ...
- hdu-3487-Play with Chain-(splay 区间翻转,切割,插入)
题意: 区间翻转,切割,插入 // File Name: ACM/HDU/3487.cpp // Author: Zlbing // Created Time: 2013年08月10日 星期六 21时 ...
- hdu-1890-Robotic Sort splay区间翻转
题意: 依次找第i大的数下标pos[i],然后将区间[i,pos[i]]翻转 分析: splay树区间翻转 // File Name: ACM/HDU/1890.cpp // Author: Zlbi ...
- bzoj3223 Tyvj 1729 文艺平衡树(Splay Tree+区间翻转)
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2202 Solved: 1226[Submit][Sta ...
- [置顶] hdu 1890 伸展树区间翻转
题意: 给你n个数,每次先输出第i大的数的位置(如果有多个,选下标小的那个),然后每次将第i个位置到第i大的数所在位置之间的数进行翻转. 思路:输入的数组可能有多个相同的值,我们可以进行两次排序把数组 ...
- hdu3397区间覆盖,区间翻转,区间合并,区间求和
调了很久的代码..注意区间翻转和覆盖的操作互相的影响 /* 区间替换操作怎么搞? 应该是加个tag标记 如果整个区间都是0|1,那么把若有tag的话直接set1|0即可,也不用设置tag标记 反之要设 ...
- CODEVS 4655 序列终结者-splay(区间更新、区间翻转、区间最值)
4655 序列终结者 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 题目描述 Description 网上有许多题,就是给定一个序列,要 ...
随机推荐
- 转:如何取得Spring管理的bean
原文链接:http://blog.csdn.net/a9529lty/article/details/42145545 1.servlet方式加载时,[web.xml] <servlet> ...
- 准备Activiti的开发环境
1.创建项目
- 10_Jaxws使用自定义pojo发布服务
[简述] 查询三天的天气信息(天气概况.日期.温度),测试jaxws是否支持自定义pojo发布服务. [开发过程] 服务端: 1.自定义pojo(天气概况.日期.温度) 2.开发SEI接口及实现类 3 ...
- C++ 中的类型转换机制详解
Tips: This article based on Scott Meyers's <<Effective C++>> article 27: Minimize Castin ...
- normalize.css介绍
Normalize.css 只是一个很小的CSS文件,但它在默认的HTML元素样式上提供了跨浏览器的高度一致性.相比于传统的CSS reset,Normalize.css是一种现代的.为HTML5准备 ...
- 解决IE6下Position:fixed问题(只用css)
在IE6.0及以下版本的浏览器里是不支持position:fixed.而在IE7,IE8,firefox,opera,chrome都可以完美的支持此特性的.解决此问题的要点主要有: 1).容器要有一个 ...
- (转载)使用ADOConnet.BeginTrans后,出现错误提示:无法在此会话中启动更多的事务?
Q: 三层结构,在服务器端使用adoconnection连接到sqlserver2000,然后想在 datasetprovider的beforupdaterecord中使用语句: try adocon ...
- 关于ASE日志空间示数不正常的解决办法
最近某系统的ASE数据库出现了异常,经过各种努力,终于把数据库正常又起起来了.但是经过检查,发现在查看剩余日志空间的时候(sp_helpsegment 'logsegment'),发现显示出来 ...
- 自动寻路NavMesh
步骤 1.创建地形 2.添加角色 3.创建多个障碍物,尽量摆放的复杂些,用来检测NavMesh的可用性和效率 4.选中地形,在Navigation窗口中,设置Navigation Static 5.依 ...
- tomcat 7 下添加 shared/lib 文件夹
你打开tomcat7\conf\catalina.properties文件再打开tomcat5的,看完后, 你就知道了 tomcat 5.5.35 # # List of comma-separate ...