这题掉了一句话,调了N久~~~

#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
using namespace std;
const int MAXN = 100010;
int  setv[MAXN<<2], XOR[MAXN<<2], sum[MAXN<<2], maxv[MAXN<<2], minv[MAXN<<2];
int  val[MAXN];
char str[MAXN];void PushUp(int rt)
{sum[rt]  = sum[rt<<1] + sum[rt<<1|1];maxv[rt] = max(maxv[rt<<1], sum[rt<<1] + maxv[rt<<1|1]);minv[rt] = min(minv[rt<<1], sum[rt<<1] + minv[rt<<1|1]);
}void PushDown(int rt, int l, int r)
{int m = (l + r)>>1;if(setv[rt] != 0){setv[rt<<1] = setv[rt<<1|1] = setv[rt];XOR[rt<<1] = XOR[rt<<1|1] = 0;sum[rt<<1] = (m - l + 1) * setv[rt];sum[rt<<1|1] = (r - m) * setv[rt];maxv[rt<<1] = max(-1, setv[rt]*(m-l+1));minv[rt<<1] = min(1, setv[rt]*(m-l+1));maxv[rt<<1|1] = max(-1, setv[rt]*(r-m));minv[rt<<1|1] = min(1, (r-m)*setv[rt]);setv[rt] = 0;    ///}if(XOR[rt]){if(setv[rt<<1] != 0)setv[rt<<1] = -setv[rt<<1];elseXOR[rt<<1] ^= 1;if(setv[rt<<1|1] != 0)setv[rt<<1|1] = -setv[rt<<1|1];elseXOR[rt<<1|1] ^= 1;sum[rt<<1] = -sum[rt<<1];sum[rt<<1|1] = -sum[rt<<1|1];int temp;temp = minv[rt<<1];minv[rt<<1] = -maxv[rt<<1];maxv[rt<<1] = -temp;temp = minv[rt<<1|1];minv[rt<<1|1] = -maxv[rt<<1|1];maxv[rt<<1|1] = -temp;XOR[rt] = 0;   }return ;
}void Bulid(int l, int r, int rt)
{setv[rt] = 0;XOR[rt] = 0;if(l == r){sum[rt] = val[l];maxv[rt] = val[l];minv[rt] = val[l];return ;}int m = (l + r)>>1;Bulid(l, m, rt<<1);Bulid(m + 1, r, rt<<1|1);PushUp(rt);return ;
}void Update(int L, int R, int op, int l, int r, int rt)
{if(L == l && R == r){if(op == 1){setv[rt] = -1;XOR[rt]  = 0;sum[rt]  = -(r - l + 1);maxv[rt] = -1;minv[rt] = -(r - l + 1);}else if(op == 2){setv[rt] = 1;XOR[rt]  = 0;sum[rt]  = (r - l + 1);maxv[rt] = (r - l + 1);minv[rt] = 1;}else if(op == 3){if(setv[rt] != 0)setv[rt] = -setv[rt];elseXOR[rt] ^= 1;sum[rt] = -sum[rt];int temp = minv[rt];minv[rt] = -maxv[rt];maxv[rt] = -temp;}return ;}PushDown(rt, l, r);int m = (l + r)>>1;if(R <= m)Update(L, R, op, l, m, rt<<1);else if(L > m)Update(L, R, op, m + 1, r, rt<<1|1);else{Update(L, m, op, l, m, rt<<1);Update(m + 1, R, op, m + 1, r, rt<<1|1);}PushUp(rt);return ;
}void Query(int L, int R, int l, int r, int rt, int &s, int &maxval)
{if(L == l && R == r){s = sum[rt]; maxval = maxv[rt];return ;}PushDown(rt, l, r);int m = (l + r)>>1;if(R <= m)Query(L, R, l, m, rt<<1, s, maxval);else if(L > m)Query(L, R, m + 1, r, rt<<1|1, s, maxval);else{int ts1, tmaxval1, ts2, tmaxval2;Query(L, m, l, m, rt<<1, ts1, tmaxval1);Query(m + 1, R, m + 1, r, rt<<1|1, ts2, tmaxval2);s = ts1 + ts2;maxval = max(tmaxval1, ts1 + tmaxval2);return ;}
}int main()
{//freopen("aa.in", "r", stdin);int T, n, m; int s, maxval, kcase = 0;char op[10]; int a, b; char ch;scanf("%d", &T);while(T--){kcase++;scanf("%d", &n);scanf("%s", str + 1);for(int i = 1; i <= n; ++i){if(str[i] == '(') val[i] = -1;if(str[i] == ')') val[i] = 1;}printf("Case %d:\n", kcase);Bulid(1, n, 1);scanf("%d", &m);while(m--){scanf("%s", op);if(op[0] == 's'){scanf("%d %d %c", &a, &b, &ch);Update(a + 1, b + 1, (ch == '(' ? 1 : 2), 1, n, 1);}if(op[0] == 'r'){scanf("%d %d", &a, &b);Update(a + 1, b + 1, 3, 1, n, 1);}if(op[0] == 'q'){scanf("%d %d", &a, &b);Query(a + 1, b + 1, 1, n, 1, s, maxval);if(s == 0 && maxval <= 0)printf("YES\n");elseprintf("NO\n");}}printf("\n");}return 0;
}

UESTC 1546 Bracket Sequence相关推荐

  1. UESTC 1546 Bracket Sequence

    UESTC_1546 这个题目可以借用判断合法括号序列的办法,将'('看作1,将')'看作-1,之后从左向右扫描一个序列并将扫描到的值累加起来,在这个过程中如果任意时刻这些值的和都不小于0,并且最后的 ...

  2. uestc 1546 Bracket Sequence (成段更新)

    题意:有T(T<10)组测试数据,然后有一个数字N(N<100000),接下来的一行里有N个字符,每个字符是'('或')',有三种操作(1)"set l r c",表示 ...

  3. Educational Codeforces Round 4 C. Replace To Make Regular Bracket Sequence 栈

    C. Replace To Make Regular Bracket Sequence 题目连接: http://www.codeforces.com/contest/612/problem/C De ...

  4. Codeforces Beta Round #5 C. Longest Regular Bracket Sequence 栈/dp

    C. Longest Regular Bracket Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.c ...

  5. Codeforces 524F And Yet Another Bracket Sequence 哈希

    And Yet Another Bracket Sequence 枚举起点, 增加的(肯定在最前面, 增加的)肯定在最后面, 比字典序用hash, 卡了自然溢出.. #include<bits/ ...

  6. Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor 栈 链表

    E. Correct Bracket Sequence Editor 题目连接: http://www.codeforces.com/contest/670/problem/E Description ...

  7. CF思维联系–CodeForces -224C - Bracket Sequence

    ACM思维题训练集合 A bracket sequence is a string, containing only characters "(", ")", ...

  8. CodeForces - 224C. Bracket Sequence (栈模拟)简单做法

    A bracket sequence is a string, containing only characters "(", ")", "[&quo ...

  9. cf1556Compressed Bracket Sequence

    cf1556Compressed Bracket Sequencex 题意: 给你n个数,奇数位置上的数表示左括号的数量,偶数位置上的数表示右括号的数量.问有多少个[l,r]是满足括号匹配的 题解: ...

最新文章

  1. phone clone android,Phone Clone
  2. 虚拟化基础架构Windows 2008篇之12-WSUS工作站端配置
  3. 腾讯云安全专家 Killer 告诉你,企业上云怎么做更安全
  4. php中的echo单引号_PHP的数据类型
  5. centos一键清理磁盘空间_如何清理 Docker 占用的磁盘空间
  6. Java—正则表达式(Pattern类和Matcher类)
  7. PAT乙级(1005 继续(3n+1)猜想)
  8. jemeter python接口自动化测试平台_python接口自动化测试之request
  9. 【clickhouse】clickhouse配置多块磁盘
  10. java BIO/NIO/AIO 学习
  11. java关于排版的说法正确是_Java代码规范--排版,命名---以及一个例子
  12. Silverlight下载-Silverlight 1.1 Tools下载
  13. linux安装mysql菜鸟教程_[新手教程]Linux环境部署MYSQL过程
  14. 新站快速排名的seo优化流程
  15. 一直都以为阿里的程序员待遇是最好的,结果真正的土豪竟然是……
  16. Python自动化测试详解
  17. 杠杆炒股的两种操作方法
  18. 谷歌大数据的三驾马车
  19. Openjudge:正常血压
  20. 基于jsp+servlet的银行管理系统(eclipse控制台和mysql数据库交互)。

热门文章

  1. url和超级url的区别
  2. Google signin 引发的崩溃(人)
  3. 【Python简明教程二十八】PIP
  4. 【005】C++数据类型之实型(浮点数)、有符号数以及无符号数
  5. 数据库设计的三大范式:详细
  6. pygame壁球游戏之节奏型操控型
  7. 关于人工智能-微软和谷歌没有告诉你的是什么
  8. Axure RP组件库下载
  9. Microsoft Edge 离线下载安装技巧
  10. java1.8 lamda表达式