SPOJ-BRCKTS (括号序列,线段树)
维护括号序列 Replace(i):
将第i个位置的括号反向。
Check:测试当前序列是否合法。
题解
将左括号定为1,右括号定为-1,所以只需要满足前缀和序列没有负数即可,即最小值
为正即可,第i个括号反向,就是该位置----n减2或者加2
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstdio> #define N 30007
using namespace std; int n,q;
char s[N];
int a[N],tr[N*],flag[N*]; void update(int p)
{
tr[p]=min(tr[p<<],tr[p<<|]);
}
void downdate(int p)
{
if (flag[p]==) return;
tr[p<<]+=flag[p],tr[p<<|]+=flag[p];
flag[p<<]+=flag[p],flag[p<<|]+=flag[p];
flag[p]=;
}
void build(int p,int l,int r)
{
if (l==r)
{
tr[p]=a[l];flag[p]=;
return;
} int mid=(l+r)>>;
build(p<<,l,mid),build(p<<|,mid+,r);
update(p);flag[p]=;
}
void change(int p,int l,int r,int x,int y,int z)
{
if (l==x&&r==y)
{
tr[p]=tr[p]+z;
flag[p]+=z;
return;
}
downdate(p);
int mid=(l+r)>>;
if (y<=mid) change(p<<,l,mid,x,y,z);
else if (x>mid) change(p<<|,mid+,r,x,y,z);
else change(p<<,l,mid,x,mid,z),
change(p<<|,mid+,r,mid+,y,z);
update(p);
}
int query(int p,int l,int r,int x,int y)
{
if (l==x&&r==y) return tr[p];
downdate(p);
int mid=(l+r)>>;
if (y<=mid) return query(p<<,l,mid,x,y);
else if (x>mid) return query(p<<|,mid+,r,x,y);
else return min(query(p<<,l,mid,x,mid),query(p<<|,mid+,r,mid+,r));
update(p);
}
int main()
{
int CASE=;
while (~scanf("%d",&n))
{
printf("Test %d:\n",++CASE);
scanf("%s",s+);
for(int i=;i<=n;i++)
if (s[i]=='(') a[i]=;
else a[i]=-;
for (int i=;i<=n;i++) a[i]=a[i-]+a[i];
build(,,n);
scanf("%d",&q);
for (int i=;i<=q;i++)
{
int x;scanf("%d",&x);
if (x==)
{
if (query(,,n,n,n)==&&tr[]==) printf("YES\n");
else printf("NO\n");
}
else
{
change(,,n,x,n,(s[x]=='(')?-:);
if (s[x]=='(')s[x]=')';
else s[x]='(';
}
}
}
}
SPOJ-BRCKTS (括号序列,线段树)的更多相关文章
- bzoj 1095 [ZJOI2007]Hide 捉迷藏(括号序列+线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1095 [题意] 给定一棵树,树上颜色或白或黑而且可以更改,多个询问求最远黑点之间的距离 ...
- 【BZOJ】1095: [ZJOI2007]Hide 捉迷藏 括号序列+线段树
[题目]BZOJ 1095 [题意]给定n个黑白点的树,初始全为黑点,Q次操作翻转一个点的颜色,或询问最远的两个黑点的距离,\(n \leq 10^5,Q \leq 5*10^5\). [算法]括号序 ...
- BZOJ1095 [ZJOI2007] Hide 捉迷藏 (括号序列 + 线段树)
题意 给你一颗有 \(n\) 个点的树 , 共有 \(m\) 次操作 有两种类别qwq 将树上一个点染黑/白; 询问树上最远的两个黑点的距离. \((n \le 200000, m ≤500000)\ ...
- 【BZOJ 1095】 1095: [ZJOI2007]Hide 捉迷藏 (括号序列+线段树)
1095: [ZJOI2007]Hide 捉迷藏 Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏 ...
- Snacks HDU 5692 dfs序列+线段树
Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...
- SPOJ Meteors - 可持久化线段树 - 二分法
Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby galaxy. The plan ...
- hdu 4521 小明系列问题——小明序列 线段树+二分
小明系列问题——小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Pro ...
- BZOJ 4034 树上操作(树的欧拉序列+线段树)
刷个清新的数据结构题爽一爽? 题意: 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x ...
- 【Foreign】划分序列 [线段树][DP]
划分序列 Time Limit: 20 Sec Memory Limit: 256 MB Description Input Output 仅一行一个整数表示答案. Sample Input 9 4 ...
- BZOJ 1798 AHOI2009 Seq 维护序列 线段树
题目大意:维护一个序列,提供三种操作: 1.将区间中每个点的权值乘上一个数 2.将区间中每个点的权值加上一个数 3.求一段区间的和对p取模的值 2631的超^n级弱化版.写2631之前能够拿这个练练手 ...
随机推荐
- 443 String Compression 压缩字符串
给定一组字符,使用原地算法将其压缩.压缩后的长度必须始终小于或等于原数组长度.数组的每个元素应该是长度为1 的字符(不是 int 整数类型).在完成原地修改输入数组后,返回数组的新长度.进阶:你能否仅 ...
- 基于Ubuntu14.04下Suricata(一款高性能的网络IDS、IPS和网络安全监控引擎)的搭建(图文详解)(博主推荐)
为什么,要写这篇论文? 是因为,目前科研的我,正值研三,致力于网络安全.大数据.机器学习研究领域! 论文方向的需要,同时不局限于真实物理环境机器实验室的攻防环境.也不局限于真实物理机器环境实验室的大数 ...
- SharePoint Server 2013 Search Service stop
管理中心 - 系统设置 - 管理服务器上的服务:“搜索主机控制器服务” 停止即可,服务器管理 - 工具 - 服务 :sharepoint search host controller 服务会自动禁用.
- Windows API函数大全一
1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连 ...
- .NET 之ViewState的本质
ViewState是如何实现这些功能. 以名值对的方式来存控件的值,和Hashtable的结构类似: 跟踪那些ViewState中出现改变的值,以便对这些脏数据(dirty)进行进一步的处理: 通过序 ...
- R in action读书笔记(6)-第七章:基本统计分析(中)
7.2 频数表和列联表 > library(vcd) > head(Arthritis) ID Treatment Sex Age Improved 1 57 Treated Male 2 ...
- 计算器Pro应用项目源码
本计算器实现了一些简单的功能,可能本身还存在一些缺陷,希望大家提建议,能够改进一下. 源码项目我已经上传到源码天堂那里了:http://code.662p.com/list/11_1.html < ...
- 观锁和乐观锁——《POJOs in Action》
1 事务隔离 事务隔离是数据库提供的功能. SQL Server通过SET TRANSACTION ISOLATION LEVEL语句设置事务隔离级别: SET TRANSACTION ...
- OpenGL VAO, VBO 使用简介
参照代码样例: // This function takes in a vertex, color, index and type array // And does the initializati ...
- 前复权是从今天的价格倒推 后复权是从上市价格前推 不复权就是原始K线。
前复权是从今天的价格倒推 后复权是从上市价格前推 不复权就是原始K线.