SOL:

我们用平衡树维护就好啦。

// getlazy
#include<bits/stdc++.h>
using namespace std;
inline int rop() {static int x=23333;return x^=x<<13,x^=x>>17,x^=x<<5;
}
#define Mid (l+r>>1)
#define rr NULL
struct T{int val,key,rev,usd,siz;T* son[2];inline T(int x) {key=x; val=rop(); rev=0; son[0]=son[1]=rr; siz=1; usd=(x==1);}inline void up() {siz=1; usd=(key==1);if (son[0]) {siz+=son[0]->siz;usd|=son[0]->usd;}if (son[1]) {siz+=son[1]->siz;usd|=son[1]->usd;}}inline void down() {if (!rev) return;swap(son[0],son[1]);if (son[0]) son[0]->rev^=1;if (son[1]) son[1]->rev^=1; rev=0; }
}*rt,*x,*y,*z;
#define N 200007
void split(T* now,int k,T* &x,T* &y) {if (!now)  { x=rr,y=rr; return;}now->down();int cmp=(now->son[0]?now->son[0]->siz:0)+1;if (k<cmp) y=now,split(y->son[0],k,x,y->son[0]);else x=now,split(x->son[1],k-cmp,x->son[1],y);now->up();
}
T* merge(T* x,T* y) {if (!x) return y; if (!y) return x;x->down(); y->down();if (x->val<y->val) {x->son[1]=merge(x->son[1],y);x->up(); return x;} y->son[0]=merge(x,y->son[0]);y->up(); return y;
}
int find(T* x){x->down();if (x->son[0]&&x->son[0]->usd) return find(x->son[0]);if (x->key>0) return (x->son[0]?x->son[0]->siz:0)+1;return (x->son[0]?x->son[0]->siz:0)+1+find(x->son[1]);
}
int n,a[N],t;
T* build(int l,int r){if (l>r) return rr;T* x=new T(a[Mid]);x->son[0]=build(l,Mid-1);x->son[1]=build(Mid+1,r);x->up(); return x;
}
#define in(x) (x=='('||x==')')
#define pu(x) (x=='('?1:-1)
int sum=0,l[N],r[N],tot;
int read(int *a) {int t=0;char c=getchar();for (;!in(c);c=getchar());for (;in(c);c=getchar()) a[++t]=pu(c),sum+=a[t];if (sum) return 0;return t;
}
void write(int x){if (x<10) {putchar('0'+x); return;} write(x/10); putchar('0'+x%10);}
inline void writeln(int x){ if (x<0) putchar('-'),x*=-1; write(x); putchar('\n'); }
inline void writel(int x){ if (x<0) putchar('-'),x*=-1; write(x); putchar(' '); }
void dfs(T* x){if (!x) return;x->down();if (x->son[0]) dfs(x->son[0]);writel(x->key);if (x->son[1]) dfs(x->son[1]);
}
signed main () {
//    freopen("a.in","r",stdin);n=read(a);if (n==0) {writeln(-1); return 0;}rt=build(1,n);
//    dfs(rt),putchar('\n');for (int i=1;i<=n;i++) {split(rt,1,x,rt);if (sum+(x->key)<0) {rt=merge(x,rt);t=find(rt);split(rt,t,y,z);y->rev^=1;rt=merge(y,z);
//            dfs(rt),putchar('\n');
//            writel(i); writeln(i+t-1);l[++tot]=i; r[tot]=i+t-1;split(rt,1,x,rt);}sum+=x->key;}writeln(tot);for (int i=1;i<=tot;i++)writel(l[i]),writeln(r[i]);return 0;
}

转载于:https://www.cnblogs.com/rrsb/p/8849301.html

【UR #2】 猪猪侠再战括号序列相关推荐

  1. UOJ#31 【UR #2】猪猪侠再战括号序列

    传送门http://uoj.ac/problem/31 大家好我是来自百度贴吧的_叫我猪猪侠,英文名叫_CallMeGGBond. 我不曾上过大学,但这不影响我对离散数学.复杂性分析等领域的兴趣:尤其 ...

  2. UOJ #31 【UR #2】猪猪侠再战括号序列

    大家好我是来自百度贴吧的_叫我猪猪侠,英文名叫_CallMeGGBond. 我不曾上过大学,但这不影响我对离散数学.复杂性分析等领域的兴趣:尤其是括号序列理论,一度令我沉浸其中,无法自拔.至于OI算法 ...

  3. [UOJ #31]【UR #2】猪猪侠再战括号序列

    题目大意:给你一个长度为$2n$的括号序列,保证$n$个`(`,$n$个`)`.要求输出一种可行方案,通过小于等于$n$的步数,每次交换区间$[x_i,y_i]$(立即交换),使得最后括号序列合法 题 ...

  4. 【UR #2】猪猪侠再战括号序列

    ---恢复内容开始--- 大概就是判断合法的括号序列的问题,进行翻转使其成为合法的括号序列. 1.前缀和的做法:非常妙啊,左括号和右括号分别即为1和-1,合法的组合累加和一定为非负数,而不合法的情况就 ...

  5. uoj problem 31 猪猪侠再战括号序列

    题目大意: 给定一个长度为2n的括号序列.定义一个关于区间[l,r]的翻转操作为位置平移对调. 即翻转")))()("可以得到"()()))((" 用不超过n次 ...

  6. UOJ #31. 【UR #2】猪猪侠再战括号序列

    1e5 不一定是nlogn 也可能是o(n) 事实上如果是 1e6 o(n)会跑好久 然后题目中的限制有很大的用处 : nn 个左括号 "(" 和 nn 个右括号 ")& ...

  7. UOJ#31. 【UR #2】猪猪侠再战括号序列 splay

    显然可以直接凑左面全是左括号,右面全是右括号的情况. 然后区间翻转就用 splay 模拟好了. splay 的时候一定注意一点: 如果没有调用 find(x),就一定要手动把 x 及其祖先的节点 pu ...

  8. [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)

    [BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个 ...

  9. BZOJ4350: 括号序列再战猪猪侠

    Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列 ...

最新文章

  1. asp and asp.net trips
  2. DynamicPopulate
  3. JDK8之Stream
  4. 【技术系列】浅谈GPU虚拟化技术(第一章)
  5. vim之好用插件-ctrlp.vim
  6. Boost:std ::bind与Boost的_1绑定的测试程序
  7. python中修改字符串的值
  8. Java SringBoot demo
  9. c语言 指针函数pdf,C语言指针经验总结(经典).pdf
  10. win10本地计算机策略进不去,win10系统gpedit.msc打不开怎么处理 win10本地安全策略打不开...
  11. 服务器ftp查看文件,ftp命令查看文件列表 - 卡饭网
  12. UE4 制作灯光秀的灯光阵列和动画
  13. P1413 坚果保龄球洛谷c++题解
  14. 互联网时代如何快速提升宣传效果?
  15. azkaban报错Error Chunking during uploading files to db
  16. pyqt5使用pyinstaller打包项目为exe
  17. Linux下安装软件的3种方式
  18. 如何反编译 cocos creator 生成 的jsc文件/反编译jsc文件(三) , 还原cocos creator 工程
  19. ubuntu下linux:curl使用ftp获取服务器上指定目录的所有文件集合以及下载
  20. 好程序员web前端教程分享网页设计需要学那些东西?

热门文章

  1. 设置matplotlib绘图的y轴为百分比格式
  2. React基础学习笔记(一)-react前端项目的两种搭建方式
  3. linux里实现sl跑火车
  4. 华硕服务器不识别硬盘,华硕笔记本电脑无法识别硬盘该如何处理
  5. 网络安全是一个好专业吗
  6. 蠕虫病毒往往是通过进入计算机系统,基础知识1计算机基础.doc
  7. 【8位单片机探究】STC89C51与STM8简要对比
  8. 《General Virtual Sketching Framework for Vector Line Art》论文介绍
  9. OverTheWire: Bandit通关指引
  10. 极客日报:​​​字节员工操纵抖音热榜被判刑;微信群聊可直接访问电商外链;JetBrains发布新一代编辑器Fleet