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 ...
随机推荐
- ZedGraph如何动态的加载曲线
ZedGraph的在线文档 http://zedgraph.sourceforge.net/documentation/default.html 官网的源代码 http://sourceforge.n ...
- poj 2449 Remmarguts' Date 求第k短路 Astar算法
=.=好菜 #include <iostream> #include <cstdio> #include <string.h> #include <cstri ...
- [BZOJ3609][Heoi2014]人人尽说江南好 结论题
Description 小 Z 是一个不折不扣的 ZRP(Zealot Round-game Player,回合制游戏狂热玩家), 最近他 想起了小时候在江南玩过的一个游戏. 在过去,人们是要 ...
- 2017年P4中国峰会北京站 会议小结
2017 P4 中国峰会 北京 本次会议依然侧重介绍P4,并highlight P4的benifit,大致分为以下几类: 1.学术界 - 未来网络的发展,为何提出P4技术? 未来网络和实体经济.其他学 ...
- [异常记录-12]Web Deploy部署:未能连接到远程计算机,请确保在远程计算机上安装了 Web Deploy 并启动了所需的进程("Web Management Service")
Web Deploy 安装 请参考:图文详解远程部署ASP.NET MVC 5项目 如此安装后还不行, 可以在卸载后重新安装 Web Deploy 时,不要选那个经典还是典型的安装选项,选自定义安装 ...
- C# 获取文件夹下的所有文件夹及其文件
//获得当前文件夹下所有文件夹 string path = "D://文件夹"; string[] dirstr = Directory.GetDirectories(path); ...
- ubuntu-server14.04 网络配置
一.启动网卡 ubuntu server 安装后,ifconfig 发现只有一个lo 和一个p1p1 网卡, 先查看服务器网卡:ifconfig -a ,发现有lo ,p1p1,p2p1,p3p1,p ...
- python 操作浏览器打开指定网页
#! /usr/bin/env python # encoding=utf8 import webbrowser import time webbrowser.open("http://ww ...
- 【Jmeter】Jmeter 5.0新特性
前言 Jmeter 5.0这次的核心改进是在许多地方改进了对 Rest 的支持,此外还有调试功能.录制功能的增强.报告的改进等. 我也是因为迁移到了Mac,准备在Mac上安装Jmeter的时候发现它已 ...
- Linux上安装Oracle的教程-centos7
一.安装Oracle前准备 1.创建运行oracle数据库的系统用户和用户组 [humf@localhost ~]$ su root #切换到root Password: [root@lo ...