把$($看作$-1$,$)$看作$1$,设$a$为前缀和,则相当于找两个位置$x,y$使得$a[x]=a[y]$,且$a[x]$是$[x,y]$的区间最大值。

求出询问区间的最大值$o$,然后找到$o$在该区间内最左和最右的出现位置,将其作为答案。

那么剩下的答案只可能在$[l,o)$或$(o,r]$,以$[l,o)$为例。

通过单调栈求出每个位置$i$往右最长延伸长度$g[i]$,使得中间$a[i]$是区间最大值,且$a[i]=a[i+g[i]]$。

那么在$[l,o)$中,因为$o$的阻隔,必然满足$i+g[i]<o$,找到最大的即可。

时间复杂度$O(n\log n)$。

#include<cstdio>
#include<algorithm>
using namespace std;
typedef pair<int,int>P;
const int N=400010,M=1050000,inf=~0U>>1;
int n,m,i,x,y,l,r,o,ans,a[N],q[N],t,f[N],g[N],v[M],vf[M],vg[M];P b[N];char s[N];
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline void up(int&a,int b){a<b?(a=b):0;}
void build(int x,int a,int b){
if(a==b){
v[x]=::a[a];
vf[x]=f[a];
vg[x]=g[a];
return;
}
int mid=(a+b)>>1;
build(x<<1,a,mid),build(x<<1|1,mid+1,b);
v[x]=max(v[x<<1],v[x<<1|1]);
vf[x]=max(vf[x<<1],vf[x<<1|1]);
vg[x]=max(vg[x<<1],vg[x<<1|1]);
}
int ask(int x,int a,int b,int c,int d,int*v){
if(c<=a&&b<=d)return v[x];
int mid=(a+b)>>1,t=-inf;
if(c<=mid)t=ask(x<<1,a,mid,c,d,v);
if(d>mid)up(t,ask(x<<1|1,mid+1,b,c,d,v));
return t;
}
int main(){
scanf("%d%d%s",&n,&m,s+2);n++;
for(i=2;i<=n;i++)a[i]=a[i-1]+(s[i]==')'?1:-1);
for(i=1;i<=n;i++)b[i]=P(a[i],i);
sort(b+1,b+n+1);
for(q[t=0]=0,i=1;i<=n;q[++t]=i++){
while(t&&a[i]>=a[q[t]])t--;
f[i]=i-upper_bound(b+1,b+n+1,P(a[i],q[t]))->second;
}
for(q[t=0]=n+1,i=n;i;q[++t]=i--){
while(t&&a[i]>=a[q[t]])t--;
g[i]=(lower_bound(b+1,b+n+1,P(a[i],q[t]))-1)->second-i;
}
build(1,1,n);
while(m--){
read(x),read(y);y++;
o=ask(1,1,n,x,y,v);
l=lower_bound(b+1,b+n+1,P(o,x))->second;
r=(upper_bound(b+1,b+n+1,P(o,y))-1)->second;
ans=r-l;
if(l>x)up(ans,ask(1,1,n,x,l-1,vg));
if(r<y)up(ans,ask(1,1,n,r+1,y,vf));
printf("%d\n",ans);
}
return 0;
}

  

BZOJ4964 : 加长的咒语的更多相关文章

  1. LCIS(最长公共上升子序列)Vijos1264神秘的咒语

    描述 身为拜月教的高级间谍,你的任务总是逼迫你出生入死.比如这一次,拜月教主就派你跟踪赵灵儿一行,潜入试炼窟底. 据说试炼窟底藏着五行法术的最高法术:风神,雷神,雪妖,火神,山神的咒语.为了习得这些法 ...

  2. [vijos1264]神秘的咒语(LCIS)

    描述身为拜月教的高级间谍,你的任务总是逼迫你出生入死.比如这一次,拜月教主就派你跟踪赵灵儿一行,潜入试炼窟底.据说试炼窟底藏着五行法术的最高法术:风神,雷神,雪妖,火神,山神的咒语.为了习得这些法术, ...

  3. 51Nod 1509加长棒

    传送门 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1509 现在有三根木棒,他们的长度分别是a,b,c厘米.你可以对他 ...

  4. hdu 1181 以b开头m结尾的咒语 (DFS)

    咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体现在要将一个B(ball)变成一个M(Mouse),比如 "big-got-them". Sample Inp ...

  5. 51Nod 1509 加长棒(隔板法)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1509 思路: 直接去解可行的方法有点麻烦,所以应该用总的方法去减去不可行 ...

  6. 【BZOJ5073】[Lydsy十月月赛]小A的咒语 DP(错解)

    [BZOJ5073][Lydsy十月月赛]小A的咒语 题解:沙茶DP,完全不用后缀数组. 用f[i][j]表示用了A的前i个字符,用了j段,最远能匹配到哪.因为显然我们能匹配到的地方越远越好,所以我们 ...

  7. vijos1264:神秘的咒语

    描述 身为拜月教的高级间谍,你的任务总是逼迫你出生入死.比如这一次,拜月教主就派你跟踪赵灵儿一行,潜入试炼窟底. 据说试炼窟底藏着五行法术的最高法术:风神,雷神,雪妖,火神,山神的咒语.为了习得这些法 ...

  8. VijosP1274:神秘的咒语

    描述 身为拜月教的高级间谍,你的任务总是逼迫你出生入死.比如这一次,拜月教主就派你跟踪赵灵儿一行,潜入试炼窟底. 据说试炼窟底藏着五行法术的最高法术:风神,雷神,雪妖,火神,山神的咒语.为了习得这些法 ...

  9. [题解] cogs 1669 神秘的咒语

    http://cogs.pro:8080/cogs/problem/problem.php?pid=1669 "The Real Incantation is Their Common In ...

随机推荐

  1. docker文件复制到centos/linux/ubantun环境下

    1.有些时候我们需要将容器里面的文件,弄到系统里面来分析,像报错log等 格式:docker  cp  容器名:文件在容器里面的路径       要拷贝到宿主机的对应路径 2.有些情况下,我们需要将文 ...

  2. 步步為營-97-MyMVC3

    說明: 解決另外一個不合理之處:通過控制器完成處理 1:在mvc文件夾下面添加一個工廠類文件DefaultControllerFactory 1.2進一步升級為抽象工廠 2 下一步如何規範Contro ...

  3. 使用Vmware CLI 6.5控制虚拟机,并做快照

    1.下载PowerCLI 6.5 http://7dx.pc6.com/wwb5/VMwarePowerCLI65.zip 2. 打开 VMware vSphere PowerCLI 出现 无法加载文 ...

  4. Hadoop ConnectTimeoutException

    晚上继续学习tfidf示例.在跑TwoJob的时候报如下错误,开始以为是node02的防火墙没关好,但看了一下防火墙确实是关了的. 2019-03-30 23:48:19,705 INFO retry ...

  5. python---通过递归和动态规划策略解决找零钱问题

    也是常见套路. # coding = utf-8 def rec_mc(coin_value_list, change, know_results): min_coins = change if ch ...

  6. weex用阿里矢量图

    首先这段代码来自 zwwill在github上的 weex网易严选项目 他是在utils下封装了一个方法 let utilFunc = { initIconFont () { let domModul ...

  7. BZOJ1799 self 同类分布 数位dp

    BZOJ1799self 同类分布 去博客园看该题解 题意 给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数. [约束条件]1 ≤ a ≤ b ≤ 10^18 题解 1.所有的位数之和&l ...

  8. Python交互图表可视化Bokeh:6. 轴线| 浮动| 多图表

    绘图表达进阶操作 ① 轴线设置② 浮动设置③ 多图表设置 1. 轴线标签设置 设置字符串 import numpy as np import pandas as pd import matplotli ...

  9. mvc 过滤器篇

    1,重写类作为特性 2 写一个controller ,让其他controller集成 四种过滤器 1身份验证过滤器 2异常处理过滤器 3行为过滤器 4结果过滤器

  10. Could not find result map XXX 解决办法

    错误定位在xml文件中 resultmap类型不匹配