Brackets(bestcoder)
每次询问一个区间都根据最开始的线段树在询问的区间重建一棵线段树
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)的更多相关文章
- Brackets
按下Ctrl + E("编辑")或退出编辑.Brackets将搜索项目下所有CSS文件 Ctrl/Cmd + Alt + P 打开即时预览功能 alt + command + O目 ...
- Bestcoder#5 1002
Bestcoder#5 1002 Poor MitsuiTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- BestCoder Round #80 1002
HDU 5666 Segment 题意:给你条斜率为-1,常数项为q(q为质数)的直线,连接原点与直线上整数格点,问你在有多少个格点在形成的无数个三角形内,而不在线段上,结果对P取模. 思路:best ...
- CF380C. Sereja and Brackets[线段树 区间合并]
C. Sereja and Brackets time limit per test 1 second memory limit per test 256 megabytes input standa ...
- Brackets前端开发IDE工具
Brackets是一个开源的前端开发IDE工具,网页设计师和前端开发人员必备的前端开发IDE工具. 它能够使你在开发WEB网站实时预览你的网页,目前版本只适用于Chrome浏览器可以实时预览效果 支持 ...
- Bestcoder#5 1003
Bestcoder#5 1003 Poor RukawTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- BestCoder 2nd Anniversary
A题 Oracle http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=703&pid=1001 大数相加: ...
- Bestcoder Round #84
A题 Aaronson http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=718&pid=1001 感觉一 ...
- BestCoder Round #89 02单调队列优化dp
1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01 HDU 5944 水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...
随机推荐
- Android 手机卫士2--home页面
1,自定义获取焦点的TextView FocusTextView.java package com.itheima.mobilesafe74.view; import android.content. ...
- ORM查询语言(OQL)简介--高级篇:脱胎换骨
相关文章内容索引: ORM查询语言(OQL)简介--概念篇 ORM查询语言(OQL)简介--实例篇 ORM查询语言(OQL)简介--高级篇:脱胎换骨 ORM查询语言(OQL)简介--高级篇(续):庐山 ...
- 15个优秀的 Material Design(材料设计)案例
Material Design (材料设计)是由谷歌创建和设计的一种设计语言,结合成功的设计的经典原则以及创新科技.谷歌的目标是开发一个设计系统,让所有的产品在任何平台上拥有统一的用户体验.全新的设计 ...
- 24个很赞的 Node.js 免费教程和在线指南
JavaScript 最初是用来创建动态网站效果的的前端语言.而如今,这门脚本语言也可以用作后端开发,用于搭建 Web 服务器,开发接口,甚至创建博客.在下面这个列表中包括24个 Node.js 教程 ...
- iOS 正则 检测是否为手机号
- (BOOL)validateMobile:(NSString *)mobileNum { NSString *regex = @"^1[3|5|7|8][0-9]\\d{8}$" ...
- 图文详细解说DevExpress 2015新版亮点【附文档下载】
历时两个月,翻译自官网的更新说明文档,最后整理成册,文末附PDF地址. DevExpress 在今年6月份发布了正式的2015版本,2015在旧版基础上有明显的升级改进,尤其是DevExtreme.W ...
- List集合概述
上篇总结了Set集合,这回总结下List集合....先来框架图: 一.List集合 List集合代表一个元素有序,可重复的集合,集合中每个元素都有对应的顺序索引.List接口中增加了一些根据索引操作元 ...
- Git 分支管理策略
分支管理策略 下面我们来说一下一般企业中开发一个项目的分支策略: 主分支 master 开发分支 develop 功能分支 feature 预发布分支 release bug 分支 fixbug 其 ...
- Android中过场动画
overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left); 第一参数为进入的动画 第二参数为退出的动画 进入的动画 ...
- 详解 Spotlight on MySQL监控MySQL服务器
前一章详解了Spotlight on Unix 监控Linux服务器 ,今天再来看看Spotlight on MySQL怎么监控MySQL服务器. 注:http://www.cnblogs.com/J ...