Brakerts

每次询问一个区间都根据最开始的线段树在询问的区间重建一棵线段树

view code#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define PII pair<int, int >
using namespace std;
typedef long long LL;
const int N = 200010;
int _, n, Q;
char str[N];
PII sum[N << 2], tmp[N << 2]; PII pushUp(PII &l, PII &r) {
PII ans = make_pair(l.first, r.second);
int mi = min(l.second, r.first);
ans.first += r.first - mi;
ans.second += l.second - mi;
return ans;
} void build(int l, int r, int rt) {
if(l == r) {
sum[rt] = make_pair(str[l] == ')', str[l] == '(');
return ;
}
int m = (l + r) >> 1;
build(lson);
build(rson);
sum[rt] = pushUp(sum[rt << 1], sum[rt << 1 | 1]);
} void update(int p, int l, int r, int rt) {
if(l == r) {
sum[rt].first ^= 1;
sum[rt].second ^= 1;
return ;
}
int m = (l + r) >> 1;
if(p <= m) update(p, lson);
else update(p, rson);
sum[rt] = pushUp(sum[rt << 1], sum[rt << 1 | 1]);
} void query(int L, int R, int l, int r, int rt) {
if(L <= l && r <= R) {
tmp[rt] = sum[rt];
return ;
}
int m = (l + r) >> 1;
tmp[rt << 1] = tmp[rt << 1 | 1] = make_pair(0, 0);
if(L <= m) query(L, R, lson);
if(R > m) query(L, R, rson);
tmp[rt] = pushUp(tmp[rt << 1], tmp[rt << 1 | 1]);
} int query2(int L, int R, int k, int l, int r, int rt) {
if(tmp[rt].first + tmp[rt].second < k) return -1;
if(l == r) return l;
int m = (l + r) >> 1;
if(R <= m) return query2(L, R, k, lson);
if(L > m) return query2(L, R, k, rson); if(L <= l && R >= m) tmp[rt << 1] = sum[rt << 1];
if(L <= m + 1 && R >= r) tmp[rt << 1 | 1] = sum[rt << 1 | 1]; int num = tmp[rt << 1].first;
if(tmp[rt << 1].second > tmp[rt << 1 | 1].first) {
num += tmp[rt << 1].second - tmp[rt << 1 | 1].first;
}
if(k <= num) return query2(L, R, k, lson);
int now = k - num; now += min(tmp[rt << 1 | 1].first, tmp[rt << 1].second);
return query2(L, R, now, rson);
} void solve() {
scanf("%d%d%s", &n, &Q, str + 1); build(1, n, 1); int a, b, c, d;
while(Q--) {
scanf("%d", &a);
if(a == 1) {
scanf("%d", &b);
update(b, 1, n, 1);
} else {
scanf("%d%d%d", &b, &c, &d);
query(b, c, 1, n, 1);
int ans = query2(b, c, d, 1, n, 1);
printf("%d\n", ans);
}
}
} int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
#endif // LOCAL
cin >> _;
while(_--) solve();
return 0;
}

Brackets(bestcoder)的更多相关文章

  1. Brackets

    按下Ctrl + E("编辑")或退出编辑.Brackets将搜索项目下所有CSS文件 Ctrl/Cmd + Alt + P 打开即时预览功能 alt + command + O目 ...

  2. Bestcoder#5 1002

    Bestcoder#5 1002 Poor MitsuiTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  3. BestCoder Round #80 1002

    HDU 5666 Segment 题意:给你条斜率为-1,常数项为q(q为质数)的直线,连接原点与直线上整数格点,问你在有多少个格点在形成的无数个三角形内,而不在线段上,结果对P取模. 思路:best ...

  4. CF380C. Sereja and Brackets[线段树 区间合并]

    C. Sereja and Brackets time limit per test 1 second memory limit per test 256 megabytes input standa ...

  5. Brackets前端开发IDE工具

    Brackets是一个开源的前端开发IDE工具,网页设计师和前端开发人员必备的前端开发IDE工具. 它能够使你在开发WEB网站实时预览你的网页,目前版本只适用于Chrome浏览器可以实时预览效果 支持 ...

  6. Bestcoder#5 1003

    Bestcoder#5 1003 Poor RukawTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  7. BestCoder 2nd Anniversary

    A题 Oracle http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=703&pid=1001 大数相加: ...

  8. Bestcoder Round #84

    A题 Aaronson http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=718&pid=1001 感觉一 ...

  9. BestCoder Round #89 02单调队列优化dp

    1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01  HDU 5944   水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...

随机推荐

  1. [小北De编程手记] : Lesson 02 玩转 xUnit.Net 之 基本UnitTest & 数据驱动

    关于<玩转 xUnit.Net>系列文章,我想跟大家分享的不是简单的运行一下测试用例或是介绍一下标签怎么使用(这样的文章网上很多).上一篇<Lesson 01 玩转 xUnit.Ne ...

  2. cnodejs社区论坛2--注册

  3. 【精心挑选】15款最好的 jQuery 网格布局插件(Grid Plugins)

    如今,大多数网站设计要靠网格系统和布局,这能够提供给设计人员一个方便的途径来组织网页上的内容.网格的设计最常见于报纸和杂志的版面,由文字和图像构成的列组成. 这篇文章给大家分享精心挑选的15款最佳的 ...

  4. nodejs--实现跨域抓取数据

    最近公司安排给我一个任务,抓取页面数据:http://survey.finance.sina.com.cn/static/20205/20131120.html?pid=20205&dpc=1 ...

  5. .Net元编程【Metaprogramming in NET】 序-翻译

    最近在看这本书,比较实用.抽点时间把公开的部分内容简单的翻译了一下,下文是序部分. 书的具体地址为: http://www.amazon.cn/Metaprogramming-in-NET-Hazza ...

  6. Creating Custom Connector Sending Claims with SharePoint 2013

    from:http://blogs.msdn.com/b/security_trimming_in_sharepoint_2013/archive/2012/10/29/creating-custom ...

  7. 自定义JSP标签库及Properties使用

    自定义JSP标签库及Properties使用 自定义JSP标签 自定义JSP标签技术是在JSP 1.1版本中才出现的,它支持用户在JSP文件中自定义标签,这样可以使JSP代码更加简洁. 这些可重用的标 ...

  8. iOS启动过程

    1.main函数 | 2.UIApplicationMain      * 创建UIApplication对象      * 创建UIApplication的delegate对象 | 3.delega ...

  9. 干货之运用CALayer创建星级评分组件(五角星)

    本篇记录星级评分组件的创建过程以及CALayer的运用. 为了实现一个星级评分的组件,使用了CALayer,涉及到mask.CGPathRef.UIBezierPath.动画和一个计算多角星关键节点的 ...

  10. linux 学习随笔-vim

    在自己的home/username目录下 更改vim的配置文件 如果没这个文件 copy其他人的配置文件 然后拖到此目录下 执行mv vimrc ~/.vimrc 更改名字 即可生效 只对当前用户生效 ...