【UR #2】 猪猪侠再战括号序列
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】 猪猪侠再战括号序列相关推荐
- UOJ#31 【UR #2】猪猪侠再战括号序列
传送门http://uoj.ac/problem/31 大家好我是来自百度贴吧的_叫我猪猪侠,英文名叫_CallMeGGBond. 我不曾上过大学,但这不影响我对离散数学.复杂性分析等领域的兴趣:尤其 ...
- UOJ #31 【UR #2】猪猪侠再战括号序列
大家好我是来自百度贴吧的_叫我猪猪侠,英文名叫_CallMeGGBond. 我不曾上过大学,但这不影响我对离散数学.复杂性分析等领域的兴趣:尤其是括号序列理论,一度令我沉浸其中,无法自拔.至于OI算法 ...
- [UOJ #31]【UR #2】猪猪侠再战括号序列
题目大意:给你一个长度为$2n$的括号序列,保证$n$个`(`,$n$个`)`.要求输出一种可行方案,通过小于等于$n$的步数,每次交换区间$[x_i,y_i]$(立即交换),使得最后括号序列合法 题 ...
- 【UR #2】猪猪侠再战括号序列
---恢复内容开始--- 大概就是判断合法的括号序列的问题,进行翻转使其成为合法的括号序列. 1.前缀和的做法:非常妙啊,左括号和右括号分别即为1和-1,合法的组合累加和一定为非负数,而不合法的情况就 ...
- uoj problem 31 猪猪侠再战括号序列
题目大意: 给定一个长度为2n的括号序列.定义一个关于区间[l,r]的翻转操作为位置平移对调. 即翻转")))()("可以得到"()()))((" 用不超过n次 ...
- UOJ #31. 【UR #2】猪猪侠再战括号序列
1e5 不一定是nlogn 也可能是o(n) 事实上如果是 1e6 o(n)会跑好久 然后题目中的限制有很大的用处 : nn 个左括号 "(" 和 nn 个右括号 ")& ...
- UOJ#31. 【UR #2】猪猪侠再战括号序列 splay
显然可以直接凑左面全是左括号,右面全是右括号的情况. 然后区间翻转就用 splay 模拟好了. splay 的时候一定注意一点: 如果没有调用 find(x),就一定要手动把 x 及其祖先的节点 pu ...
- [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)
[BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个 ...
- BZOJ4350: 括号序列再战猪猪侠
Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列 ...
最新文章
- asp and asp.net trips
- DynamicPopulate
- JDK8之Stream
- 【技术系列】浅谈GPU虚拟化技术(第一章)
- vim之好用插件-ctrlp.vim
- Boost:std ::bind与Boost的_1绑定的测试程序
- python中修改字符串的值
- Java SringBoot demo
- c语言 指针函数pdf,C语言指针经验总结(经典).pdf
- win10本地计算机策略进不去,win10系统gpedit.msc打不开怎么处理 win10本地安全策略打不开...
- 服务器ftp查看文件,ftp命令查看文件列表 - 卡饭网
- UE4 制作灯光秀的灯光阵列和动画
- P1413 坚果保龄球洛谷c++题解
- 互联网时代如何快速提升宣传效果?
- azkaban报错Error Chunking during uploading files to db
- pyqt5使用pyinstaller打包项目为exe
- Linux下安装软件的3种方式
- 如何反编译 cocos creator 生成 的jsc文件/反编译jsc文件(三) , 还原cocos creator 工程
- ubuntu下linux:curl使用ftp获取服务器上指定目录的所有文件集合以及下载
- 好程序员web前端教程分享网页设计需要学那些东西?
热门文章
- 设置matplotlib绘图的y轴为百分比格式
- React基础学习笔记(一)-react前端项目的两种搭建方式
- linux里实现sl跑火车
- 华硕服务器不识别硬盘,华硕笔记本电脑无法识别硬盘该如何处理
- 网络安全是一个好专业吗
- 蠕虫病毒往往是通过进入计算机系统,基础知识1计算机基础.doc
- 【8位单片机探究】STC89C51与STM8简要对比
- 《General Virtual Sketching Framework for Vector Line Art》论文介绍
- OverTheWire: Bandit通关指引
- 极客日报:​​​字节员工操纵抖音热榜被判刑;微信群聊可直接访问电商外链;JetBrains发布新一代编辑器Fleet