bzoj2209
题解:
splay打标机
往下传递
记录x,y为化简后,区间有多少(,)
代码:
#include<bits/stdc++.h>
const int N=;
using namespace std;
int n,m,t,l,r,c[N][],sum[N],a[N],sz[N],fa[N],rt,rev[N],ops[N];
char s[N];
struct node
{
int l0,l1,r0,r1;
}val[N];
void maintain(int k)
{
int l=c[k][],r=c[k][];
sum[k]=a[k]+sum[l]+sum[r];sz[k]=sz[l]+sz[r]+;
val[k].l0=min(val[l].l0,sum[l]+a[k]+val[r].l0);
val[k].l1=max(val[l].l1,sum[l]+a[k]+val[r].l1);
val[k].r0=min(val[r].r0,sum[r]+a[k]+val[l].r0);
val[k].r1=max(val[r].r1,sum[r]+a[k]+val[l].r1);
}
void rever(int k)
{
rev[k]^=;
swap(val[k].l0,val[k].r0);
swap(val[k].l1,val[k].r1);
}
void opsite(int k)
{
ops[k]^=;sum[k]=-sum[k];a[k]=-a[k];
swap(val[k].l0,val[k].l1);
swap(val[k].r0,val[k].r1);
val[k].l0=-val[k].l0;val[k].l1=-val[k].l1;
val[k].r0=-val[k].r0;val[k].r1=-val[k].r1;
}
void pushdown(int k)
{
if (rev[k])
{
swap(c[k][],c[k][]);rev[k]=;
rever(c[k][]);rever(c[k][]);
}
if (ops[k])
{
opsite(c[k][]);
opsite(c[k][]);
ops[k]=;
}
}
void rotate(int x,int &k)
{
int y=fa[x],z=fa[y],r=(x==c[y][])?:;
if (y==k)k=x;
else if (c[z][]==y)c[z][]=x;
else c[z][]=x;
fa[x]=z;fa[y]=x;fa[c[x][r]]=y;
c[y][r^]=c[x][r];c[x][r]=y;
maintain(y);maintain(x);
}
void splay(int x,int &k)
{
while (x!=k)
{
int y=fa[x],z=fa[y];
if (y!=k)
if ((c[y][]==x)^(c[z][]==y))rotate(x,k);
else rotate(y,k);
rotate(x,k);
}
}
int find(int k,int rst)
{
pushdown(k);
int l=c[k][],r=c[k][];
if (sz[l]+==rst)return k;
if (sz[l]>=rst)return find(l,rst);
return find(r,rst-sz[l]-);
}
void build(int &k,int l,int r,int last)
{
if (l>r)
{
k=;
return;
}
k=(l+r)>>;
fa[k]=last;
if (l==r)
{
sum[k]=a[l];sz[k]=;
if (a[l]<)val[k].l0=val[k].r0=-;
if (a[l]>)val[k].l1=val[k].r1=;
return;
}
build(c[k][],l,k-,k);
build(c[k][],k+,r,k);
maintain(k);
}
int main()
{
scanf("%d%d",&n,&m);
scanf("%s",s+);
for (int i=;i<=n+;i++)
if (s[i]=='(')a[i]=;else a[i]=-;
build(rt,,n+,);
while (m--)
{
scanf("%d%d%d",&t,&l,&r);
l=find(rt,l);r=find(rt,r+);
splay(l,rt);splay(r,c[l][]);
int k=c[r][];
if (t==)printf("%d\n",(val[k].r1+)/-(val[k].l0-)/);
if (t==)opsite(k);
if (t==)rever(k);
}
}
bzoj2209的更多相关文章
- BZOJ2209 [Jsoi2011]括号序列 splay
原文链接http://www.cnblogs.com/zhouzhendong/p/8093556.html 题目传送门 - BZOJ2209 题解 我太弱了,调出这题感觉都要吐了. 题解懒得写了. ...
- BZOJ2209: [Jsoi2011]括号序列
传送门 splay练习. 考虑把括号序列转化成类似于区间最大/最小值的情况. 显然我们可以知道括号序列消完的情况肯定是$a$个)和$b$个(,那么把这些括号全部合法化的代价显然就是$\frac{a+1 ...
- bzoj2209 2329
括号序列的经典做法把(看成1,)看成-1匹配的括号序列即任意前缀和都非负我们先解决静态的问题,给定一段括号序列求最少修改次数我们先找出最大后缀和a和最小前缀和b之间一定可以不相交显然a+|b|个括号是 ...
- bzoj2209 括号序列
题意:给你一个括号序列.操作1:询问需要更改多少个括号使之匹配. 操作2:反转序列,左括号变成右括号. 操作3:翻转序列,倒置. 标程: #include<cstdio> #include ...
- PKUSC2018训练日程(4.18~5.30)
(总计:共66题) 4.18~4.25:19题 4.26~5.2:17题 5.3~5.9: 6题 5.10~5.16: 6题 5.17~5.23: 9题 5.24~5.30: 9题 4.18 [BZO ...
随机推荐
- .NET MVC请求流程
ASP.NET MVC 请求流程:Controller MvcHandler Action Action参数赋值 .NET MVC权限设计思考之切入点
- Hadoop MapReduce编程 API入门系列之Crime数据分析(二十五)(未完)
不多说,直接上代码. 一共12列,我们只需提取有用的列:第二列(犯罪类型).第四列(一周的哪一天).第五列(具体时间)和第七列(犯罪场所). 思路分析 基于项目的需求,我们通过以下几步完成: 1.首先 ...
- UVa 10048 噪音恐惧症(Floyd)
https://vjudge.net/problem/UVA-10048 题意: 输入一个C个点S条边的无向带权图,边权表示该路径上的噪声值.输入一些询问,每次询问两个点,输出这两点间最大噪声值最小的 ...
- 机器学习-数据可视化神器matplotlib学习之路(四)
今天画一下3D图像,首先的另外引用一个包 from mpl_toolkits.mplot3d import Axes3D,接下来画一个球体,首先来看看球体的参数方程吧 (0≤θ≤2π,0≤φ≤π) 然 ...
- 获取CheckBox的值
前台获取 function chkCheckBox() { var code_arr = new Array(); //定义一数组 $('.C_B').each(function () { if ($ ...
- GBDT 简述
GBDT 全称 Gradient Boosting Decision Tree,梯度提升决策树. 梯度增强决策树的思想来源于两个地方,首先是增强算法(Boosting),然后是梯度增强(Gradien ...
- rostopic 命令
rostopic bw display bandwidth used by topic// rostopic delay display delay for topic which has heade ...
- Django内置模版过滤器
Django内置过滤器总览 可以查询下表来总览Django的内置过滤器: 过滤器 说明 add 加法 addslashes 添加斜杠 capfirst 首字母大写 center 文本居中 cut 切除 ...
- Java 类及其组成可使用的修饰符
2017-11-04 21:51:04 类: 默认,public(一个.java文件只能有一个public类),final,abstract 自己定义,public居多 不允许使用static,pri ...
- spring boot: 中文显示乱码,在applicationContext里面配置
spring boot: 中文显示乱码,在applicationContext里面配置 applicationContext.properties ########################## ...