线段树
来源:互联网 发布:java如何检测内存泄露 编辑:程序博客网 时间:2024/06/07 01:16
#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<vector>#include<map>using namespace std;#define PI acos(-1)#define inf 1e9#define lson i<<1,l,mid#define rson i<<1|1,mid+1,rint sum[300005],val[100005];char s[100005];void push_up(int i){ sum[i]=min(sum[i<<1],sum[i<<1|1]);}void build(int i,int l,int r){ if(l==r) { sum[i]=val[l]; return; } int mid=(l+r)>>1; build(lson); build(rson); push_up(i);}/*void update(int c,int l,int r,int i){ if(l==r) { sum[i]++; return; } int mid=(l+r)>>1; if (c<=mid)update(c,lson); else update(c,rson); push_up(i);}*/int querry(int i,int l,int r,int L,int R){ if(L<=l&&R>=r)return sum[i]; int ans=inf; int mid=(l+r)>>1; if(L<=mid)ans=min(ans,querry(lson,L,R)); if(R>mid) ans=min(ans,querry(rson,L,R)); return ans;}int main(){ int n,q,a,b; while(~scanf("%d%d%d",&n,&q)) { scanf("%s",s+1); for(int i=1;i<=n;i++) { if(s[i]=='(')val[i]=val[i-1]+1; else val[i]=val[i-1]-1; } build(1,1,n); while(q--) { scanf("%d%d",&a,&b); if(a>b)swap(a,b); if(s[a]=='('&&s[b]==')') { if(querry(1,1,n,a,b-1)<2) puts("No"); else puts("Yes"); } else puts("Yes"); } } return 0;}//csu1809
0 0
- 线段树?线段树!
- 线段树?线段树!
- 线段_线段树
- 线段_线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 访问量突破1000
- go 语言实现一个简单的 web 服务器
- android 判断网络状态
- 堆优化的dijkstra(迪杰斯特拉)
- 在Android应用中使用自定义证书的HTTPS连接(上)
- 线段树
- 静态库,动态库是啥,有啥区别(静态函数库/动态函数库)
- android 权限列表
- Lua require 相对路径
- delphi 三层
- 图解linux下top命令的使用
- Y组合子使用说明书
- Leetcode 32 Longest Valid Parentheses DP好题
- New