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的下标能组成等比数列 ...
随机推荐
- mysq基础一(字段类型)
本文转自 “旋木的技术博客” 博客,http://mrxiong.blog.51cto.com/287318/1651098 一.数值类型 Mysql支持所有标准SQL中的数值类型,其中包括严格数据类 ...
- 哇 真的是一个好插件!!!Sublime Text编辑文件后快速刷新浏览器
http://9iphp.com/web/html/sublime-text-refresh-browser.html这篇博文咯 来源:[Tips]Sublime Text编辑文件后快速刷新浏览器 - ...
- 极富创意的3D文件夹切换效果
今天分享的是一个极富创意的文件夹切换效果.这个案例使用CSS 3动画实现了一个3D的平行六面体旋转效果.点击顶部的3个按钮可以旋转并切换.另外,每个六面体本身是一个文件夹,点击后可以展开查看里面的详情 ...
- LigerUi框架+jquery+ajax无刷新留言板系统的实现
前些天发布了LigerUi框架的增.删.改代码,一堆代码真的也没一张图片.有的网友推荐上图,所有今天把涉及到这个框架的开源的留言板共享给大家.在修改的过程中可能有些不足的地方希望大家拍砖. 因为留言板 ...
- ArcGIS中国工具2.2正式发布
ArcGIS中国工具2.2新功能 1. 2.0全面支持ArcGIS10.3 2. 全面修改成插件,原来部分是独立运行的EXE 3. 可以制作倾斜的矩形图框 4. 修改宗地(地块)左上角为第一个点,填写 ...
- SharePoint Online 创建门户网站系列之首页布局
前 言 SharePoint Online中创建首页布局,一般都是首先将美工提供的效果图,切图成为Html + Css + Script的形式,然后,将所有资源文件传到SharePoint Onlin ...
- Asp.net web hosting
start /D "C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0" /B WebDev.WebSe ...
- ios开发人员北京,上海,深圳的工资待遇是多少?
ios开发人员北京,上海,深圳的工资待遇是多少? [1]首先看看平均工资 从图中来看,北京平均工资15570 居首,不愧是首都啊. 你过了平均线了吗?是不是感觉被平均了,如果感觉工资 ...
- ios网络编程学习
//网络访问获取数据//定义一个UIWebView属性,用来展示数据 @property (strong, nonatomic) IBOutlet UIWebView *myWebView; //.. ...
- Android 项目框架