线段树

来源:互联网 发布: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
原创粉丝点击