●BZOJ 2209 [Jsoi2011]括号序列
题链:
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #define MAXN 100500
- using namespace std;
- int N,M;
- struct SPT{
- int pmx[MAXN],pmn[MAXN],smx[MAXN],smn[MAXN],sum[MAXN],key[MAXN];
- int ch[MAXN][2],siz[MAXN],fa[MAXN],lazy[MAXN],rt;
- void Reverse(int x){
- sum[x]*=-1; key[x]*=-1;
- pmx[x]*=-1; pmn[x]*=-1; swap(pmx[x],pmn[x]);
- smx[x]*=-1; smn[x]*=-1; swap(smx[x],smn[x]);
- }
- void Flip(int x){
- swap(pmx[x],smx[x]);
- swap(pmn[x],smn[x]);
- swap(ch[x][0],ch[x][1]);
- }
- void Pushup(int x){
- siz[x]=siz[ch[x][0]]+1+siz[ch[x][1]];
- sum[x]=sum[ch[x][0]]+key[x]+sum[ch[x][1]];
- pmx[x]=max(pmx[ch[x][0]],sum[ch[x][0]]+key[x]+pmx[ch[x][1]]);
- pmn[x]=min(pmn[ch[x][0]],sum[ch[x][0]]+key[x]+pmn[ch[x][1]]);
- smx[x]=max(smx[ch[x][1]],sum[ch[x][1]]+key[x]+smx[ch[x][0]]);
- smn[x]=min(smn[ch[x][1]],sum[ch[x][1]]+key[x]+smn[ch[x][0]]);
- }
- void Pushdown(int x){
- if(lazy[x]&1){
- Reverse(ch[x][0]); lazy[ch[x][0]]^=1;
- Reverse(ch[x][1]); lazy[ch[x][1]]^=1;
- lazy[x]^=1;
- }
- if(lazy[x]&2){
- Flip(ch[x][0]); lazy[ch[x][0]]^=2;
- Flip(ch[x][1]); lazy[ch[x][1]]^=2;
- lazy[x]^=2;
- }
- }
- void Rotate(int x,int &k){
- static int y,z,l,r;
- y=fa[x]; z=fa[y];
- l=ch[y][0]!=x; r=l^1;
- if(!z) k=x;
- else ch[z][ch[z][0]!=y]=x;
- fa[ch[x][r]]=y; fa[y]=x; fa[x]=z;
- ch[y][l]=ch[x][r]; ch[x][r]=y;
- Pushup(y);
- }
- void Splay(int x,int &k){
- static int y,z;
- while(x!=k){
- y=fa[x]; z=fa[y];
- if(y!=k) (ch[z][0]!=y)^(ch[y][0]!=x)?
- Rotate(x,k):Rotate(y,k);
- Rotate(x,k);
- }
- Pushup(x);
- }
- int find(int x,int num){
- if(lazy[x]) Pushdown(x);
- if(num<=siz[ch[x][0]]) return find(ch[x][0],num);
- else if(num==siz[ch[x][0]]+1) return x;
- else return find(ch[x][1],num-siz[ch[x][0]]-1);
- }
- int Split(int l,int r){
- static int dl,dr;
- dl=find(rt,l); dr=find(rt,r+2);
- Splay(dl,rt); Splay(dr,ch[dl][1]);
- return ch[dr][0];
- }
- void Modify(int l,int r,int type){
- static int p;
- p=Split(l,r);
- if(type==1) Reverse(p);
- else Flip(p);
- lazy[p]^=type;
- Pushup(fa[p]); Pushup(fa[fa[p]]);
- }
- void Build(int &x,int dad,int l,int r){
- static char c;
- if(l>r) return;
- x=(l+r)>>1; fa[x]=dad;
- Build(ch[x][0],x,l,x-1);
- scanf(" %c",&c); key[x]=(c=='('?1:-1);
- Build(ch[x][1],x,x+1,r);
- Pushup(x);
- }
- void BorderBuild(){
- rt=N+1;
- key[N+1]=0; key[N+2]=0;
- ch[N+1][1]=N+2; fa[N+2]=N+1;
- Build(ch[N+2][0],N+2,1,N);
- Pushup(N+2); Pushup(N+1);
- }
- int Query(int l,int r){
- static int p,ANS,nl,nr;
- p=Split(l,r);
- nl=-pmn[p]; nr=smx[p];
- ANS=(nl+1)/2+(nr+1)/2;
- return ANS;
- }
- }DT;
- int main(){
- freopen("/home/noilinux/Documents/模块学习/2209.in","r",stdin);
- scanf("%d%d",&N,&M);
- DT.BorderBuild();
- for(int i=1,c,l,r;i<=M;i++){
- scanf("%d%d%d",&c,&l,&r);
- if(c==0) printf("%d\n",DT.Query(l,r));
- else DT.Modify(l,r,c);
- }
- return 0;
- }
●BZOJ 2209 [Jsoi2011]括号序列的更多相关文章
- 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 ...
- 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忘记赋值反............. 本题 ...
- 【BZOJ2329/2209】[HNOI2011]括号修复/[Jsoi2011]括号序列 Splay
[BZOJ2329/2209][HNOI2011]括号修复/[Jsoi2011]括号序列 题解:我们的Splay每个节点维护如下东西:左边有多少多余的右括号,右边有多少多余的左括号,同时为了反转操作, ...
- BZOJ2209: [Jsoi2011]括号序列
传送门 splay练习. 考虑把括号序列转化成类似于区间最大/最小值的情况. 显然我们可以知道括号序列消完的情况肯定是$a$个)和$b$个(,那么把这些括号全部合法化的代价显然就是$\frac{a+1 ...
- [HNOI2011]括号修复 / [JSOI2011]括号序列
传送门 Solution 一道题花费了两天的时间-- 在大佬@PinkRabbit的帮助下,终于AC了,感动-- 首先,我们考虑一个括号序列被修改成合法序列需要的次数: 我们需要修改的其实是形如... ...
- 洛谷 P3215 [HNOI2011]括号修复 / [JSOI2011]括号序列(fhq-treap)
题目链接 题意:有一个长度为 \(n\) 的括号序列,你需要支持以下操作: 将 \([l,r]\) 中所有括号变为 \(c\) 将 \([l,r]\) 区间翻转 将 \([l,r]\) 区间中左括号变 ...
- BZOJ2209 [Jsoi2011]括号序列 splay
原文链接http://www.cnblogs.com/zhouzhendong/p/8093556.html 题目传送门 - BZOJ2209 题解 我太弱了,调出这题感觉都要吐了. 题解懒得写了. ...
随机推荐
- 201621123040《Java程序设计》第十四周学习总结
1.本周学习总结 1.1以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 显示所有数据库: show databases; 创建数据库: create database test; 删除数据 ...
- 201621123040《Java程序设计》第六周学习总结
1.本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结 2.书面作业 2.1clone方法 2.1.1在te ...
- [USACO13JAN] Seating
https://www.luogu.org/problem/show?pid=3071 题目描述 To earn some extra money, the cows have opened a re ...
- Java看书学习笔记
1.POM:maven ,项目管理工具存放Jar包的文件2.mybatis-generator-core-1.3.2 生成文件 生成语句: java -jar mybatis-generator-co ...
- mybatis的mapper接口代理使用的三个规范
1.什么是mapper代理接口方式? MyBatis之mapper代理方式.mapper代理使用的是JDK的动态代理策略 2.使用mapper代理方式有什么好处 使用这种方式可以不用写接口的实现类,免 ...
- 网络IO超时的几种实现
一.select/poll/epoll int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,str ...
- Spring知识点回顾(07)事件发布和监听
Spring知识点回顾(07)事件发布和监听 1.DemoEvent extends ApplicationEvent { public DemoEvent(Object source, String ...
- 使用jQuery获取session中存储的list集合
在网上查找了很多关于jQuery获取session都不可得,如果大家有更好的方式,欢迎留言 这里是使用jQuery发送Ajax请求到后台获取session jsp中没有代码 js代码 <scri ...
- 百度资深架构师带你深入浅出一致性Hash原理
一.前言 在解决分布式系统中负载均衡的问题时候可以使用Hash算法让固定的一部分请求落到同一台服务器上,这样每台服务器固定处理一部分请求(并维护这些请求的信息),起到负载均衡的作用. 但是普通的余数h ...
- 推荐几个IDEA插件,Java开发者撸码利器。
这里只是推荐一下好用的插件,具体的使用方法不一一详细介绍. JRebel for IntelliJ 一款热部署插件,只要不是修改了项目的配置文件,用它都可以实现热部署.收费的,破解比较麻烦.不过功能确 ...