BZOJ2209 [Jsoi2011]括号序列 splay
原文链接http://www.cnblogs.com/zhouzhendong/p/8093556.html
题目传送门 - BZOJ2209
题解
我太弱了,调出这题感觉都要吐了。
题解懒得写了。
给一个链接:
http://blog.csdn.net/lych_cys/article/details/50700277
代码
- #include <cstring>
- #include <cstdio>
- #include <algorithm>
- #include <cstdlib>
- #include <cmath>
- using namespace std;
- const int N=100005;
- int fa[N],son[N][2],rev1[N],rev2[N],root;
- int Lmin[N],Lmax[N],Rmin[N],Rmax[N],sum[N],val[N],size[N];
- void pushup(int x){
- int ls=son[x][0],rs=son[x][1];
- sum[x]=sum[ls]+val[x]+sum[rs];
- size[x]=size[ls]+size[rs]+1;
- Lmin[x]=min(Lmin[ls],sum[ls]+val[x]+Lmin[rs]);
- Lmax[x]=max(Lmax[ls],sum[ls]+val[x]+Lmax[rs]);
- Rmin[x]=min(Rmin[rs],sum[rs]+val[x]+Rmin[ls]);
- Rmax[x]=max(Rmax[rs],sum[rs]+val[x]+Rmax[ls]);
- }
- int build(int pre,int L,int R){
- if (L>R)
- return 0;
- int mid=(L+R)>>1;
- fa[mid]=pre;
- if (L==R){
- Lmin[mid]=Rmin[mid]=Lmax[mid]=Rmax[mid]=0;
- sum[mid]=val[mid],size[mid]=1;
- if (val[mid]<0)
- Lmin[mid]=Rmin[mid]=-1;
- if (val[mid]>0)
- Lmax[mid]=Rmax[mid]=1;
- return mid;
- }
- son[mid][0]=build(mid,L,mid-1);
- son[mid][1]=build(mid,mid+1,R);
- pushup(mid);
- return mid;
- }
- void pushson(int x,int r1,int r2){
- if (!x)
- return;
- if (r1){
- rev1[x]^=1;
- swap(Lmin[x],Lmax[x]),Lmin[x]=-Lmin[x],Lmax[x]=-Lmax[x];
- swap(Rmin[x],Rmax[x]),Rmin[x]=-Rmin[x],Rmax[x]=-Rmax[x];
- sum[x]=-sum[x];
- val[x]=-val[x];
- }
- if (r2){
- rev2[x]^=1;
- swap(Lmin[x],Rmin[x]);
- swap(Lmax[x],Rmax[x]);
- swap(son[x][0],son[x][1]);
- }
- }
- void pushdown(int x){
- int &ls=son[x][0],&rs=son[x][1],&r1=rev1[x],&r2=rev2[x];
- pushson(ls,r1,r2);
- pushson(rs,r1,r2);
- r1=r2=0;
- }
- void pushadd(int x){
- if (fa[x])
- pushadd(fa[x]);
- pushdown(x);
- }
- int wson(int x){
- return son[fa[x]][1]==x;
- }
- void rotate(int x){
- if (!fa[x])
- return;
- int y=fa[x],z=fa[y],L=wson(x),R=L^1;
- if (z)
- son[z][wson(y)]=x;
- fa[x]=z,fa[y]=x,fa[son[x][R]]=y;
- son[y][L]=son[x][R],son[x][R]=y;
- pushup(y),pushup(x);
- }
- void splay(int x,int rt){
- if (!x)
- return;
- if (!rt)
- root=x;
- pushadd(x);
- for (int y=fa[x];fa[x]!=rt;rotate(x),y=fa[x])
- if (fa[y]!=rt)
- rotate(wson(x)==wson(y)?y:x);
- }
- int findkth(int x,int k){
- pushdown(x);
- if (size[son[x][0]]+1==k)
- return x;
- if (k<=size[son[x][0]])
- return findkth(son[x][0],k);
- else
- return findkth(son[x][1],k-size[son[x][0]]-1);
- }
- int n,m;
- char str[N];
- int main(){
- scanf("%d%d%s",&n,&m,str+2);
- memset(val,0,sizeof val);
- for (int i=2;i<=n+1;i++)
- val[i]=str[i]=='('?1:-1;
- root=build(0,1,n+2);
- for (int i=1;i<=m;i++){
- int op,x,y;
- scanf("%d%d%d",&op,&x,&y);
- x=findkth(root,x),y=findkth(root,y+2);
- splay(x,0);
- splay(y,x);
- int z=son[y][0];
- if (op==0)
- printf("%d\n",(Rmax[z]+1)/2-(Lmin[z]-1)/2);
- if (op==1)
- pushson(z,1,0);
- if (op==2)
- pushson(z,0,1);
- }
- return 0;
- }
BZOJ2209 [Jsoi2011]括号序列 splay的更多相关文章
- bzoj 2209: [Jsoi2011]括号序列 splay
2209: [Jsoi2011]括号序列 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 833 Solved: 392[Submit][Status ...
- BZOJ 2209: [Jsoi2011]括号序列 [splay 括号]
2209: [Jsoi2011]括号序列 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 1111 Solved: 541[Submit][Statu ...
- 【BZOJ2329/2209】[HNOI2011]括号修复/[Jsoi2011]括号序列 Splay
[BZOJ2329/2209][HNOI2011]括号修复/[Jsoi2011]括号序列 题解:我们的Splay每个节点维护如下东西:左边有多少多余的右括号,右边有多少多余的左括号,同时为了反转操作, ...
- BZOJ2209: [Jsoi2011]括号序列
传送门 splay练习. 考虑把括号序列转化成类似于区间最大/最小值的情况. 显然我们可以知道括号序列消完的情况肯定是$a$个)和$b$个(,那么把这些括号全部合法化的代价显然就是$\frac{a+1 ...
- bzoj 2209 [Jsoi2011]括号序列 平衡树
2209: [Jsoi2011]括号序列 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 1404 Solved: 699[Submit][Statu ...
- 【BZOJ】2209: [Jsoi2011]括号序列(splay)
http://www.lydsy.com/JudgeOnline/problem.php?id=2209 splay又犯逗........upd1那里的sum忘记赋值反............. 本题 ...
- 【BZOJ-2329&2209】括号修复&括号序列 Splay
2329: [HNOI2011]括号修复 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 1007 Solved: 476[Submit][Statu ...
- [BZOJ3786] 星系探索(括号序列+Splay)
3786: 星系探索 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 2191 Solved: 644[Submit][Status][Discuss ...
- [HNOI2011]括号修复 / [JSOI2011]括号序列
传送门 Solution 一道题花费了两天的时间-- 在大佬@PinkRabbit的帮助下,终于AC了,感动-- 首先,我们考虑一个括号序列被修改成合法序列需要的次数: 我们需要修改的其实是形如... ...
随机推荐
- 【原创】大数据基础之Benchmark(2)TPC-DS
tpc 官方:http://www.tpc.org/ 一 简介 The TPC is a non-profit corporation founded to define transaction pr ...
- REST风格接口测试利器Wisdom rest-client
前言 偶然间接触到Wisdom rest-client这款测试工具,后来经过尝试体验,感觉还不错,现在分享给大家,如何使用这款测试利器 Wisdom rest-client是什么? Wisdom re ...
- [C]变量作用域
函数环境变量作用域 C语言栈环境变量作用域跟JS是类似的. 就是内部函数可以访问外部函数的执行(栈)环境变量. 当访问一个变量时,程序将会查询当前栈环境是否存在这个变量,如果没有,将会往上层栈环境继续 ...
- JNI 开发基础篇:Android开发中os文件的探索
正题: android开发中,时长会遇到os文件的使用,那么os文件到底是什么?在这篇文章中会进行说明. .os文件在android中意味着C语言书写的方法,经android提供的ndk进行编译,从而 ...
- CDH运维
1.单个节点宕机后,想可能存在的问题: 时间同步是否正常运行 hbase对时间是否同步很敏感 2.zookeeper报警 ZooKeeper 服务 canary 因未知原因失败. 该警报是在重启CM的 ...
- jQuery传参
<a href="#" onClick="click_scroll('here1');">滚动到here1</a><a href= ...
- 从 Confluence 5.3 及其早期版本中恢复空间
如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话.你可以使用临时的 Confluence 空间安装,然后将 ...
- 【python】内存相关
1. /proc/pid/status 可以查看进程相关的详细信息,当内存异常时可查看 参考:http://blog.csdn.net/beckdon/article/details/4849190 ...
- 使用react 在页面上引用静态图片,图片不显示
const url='../assets/logo.png'; <img src={url} alt=''/> 1.使用require <img src={require('../a ...
- jQuery筛选器常用总结
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...