https://www.nowcoder.com/acm/contest/201#question

题意:中文不翻译了

解法的个人理解:

  对于一个合法的区间$[L,R]$

  1.显然其左括号的匹配位置都小于等于$R$,其右括号的匹配位置都大于等于$L$,

  2.左括号和右括号数量相同

  3.区间的长度为偶数

  后面两点是必要的,但是不够充分

  第一点是最关键的,我们可以考虑转化

  如果将整个序列左括号所匹配的位置记录下来作为数列$a_i$,同理右括号记为$b_i$原本的询问就等于是询问一个区间最大值和区间最小值了

  即$a_i$的最大值小于$R$,$b_i$的最小值小于$L$,至于具体怎么查,用st表,线段树,树状数组都行

  而实际上,在满足2,3条件之后,最大值和最小值只用计算其中一个即可

  例如满足了左括号的匹配位置都小于$R$,那么区间内的左括号都已经找到归属了,换句话说只要左括号和右括号数目相等,则必然合法

代码如下:

#include <bits/stdc++.h>
#define rep(ii,a,b) for(register int ii=a;ii<=b;++ii)
#define per(ii,a,b) for(register int ii=b;ii>=a;--ii)
using namespace std;
const int maxn=2e6+10,maxm=2e6+10;
int casn,n,m,k,q,a[maxn],stk[maxn];
int l[maxn],sum[maxn],st[maxn][22],top,ll,rr;
inline int rmax(int ll,int rr){
int len=0;
while(ll+(1<<len)-1<=rr) len++;
len--;
return max(st[ll][len],st[rr-(1<<len)+1][len]);
}
int main() {
scanf("%d%d%d",&n,&m,&q);
rep(i,1,n) scanf("%d",&a[i]);
rep(i,1,n)
if(a[i]%2) sum[i]=sum[i-1]-1;
else sum[i]=sum[i-1]+1;
per(i,1,n)
if(a[i]%2)stk[++top]=i;
else{
if(top&&a[i]/2==a[stk[top]]/2){
l[i]=stk[top--];
}else {
l[i]=maxn+10;
top=0;
}
}
rep(i,1,n) st[i][0]=l[i];
rep(i,1,21) rep(j,1,n)
st[j][i]=max(st[j][i-1],st[min(j+(1<<(i-1)),n)][i-1]);
while(q--){
scanf("%d%d",&ll,&rr);
if((rr-ll+1)%2==0&&sum[rr]==sum[ll-1]&&rmax(ll,rr)<=rr)
puts("Yes");
else
puts("No");
}
return 0;
}

  

牛客国庆训练,CCPC Camp DAY1 J 倍增,括号匹配的更多相关文章

  1. 牛客寒假基础集训营 | Day1 J题—u's的影响力(水题)

    Day1 J题-u's的影响力 有一天,kotori发现了一个和lovelive相似的游戏:bangdream.令她惊讶的是,这个游戏和lovelive居然是同一个公司出的! kotori经过一段时间 ...

  2. 牛客国庆训练 H.千万别用树套树

    链接https://ac.nowcoder.com/acm/contest/1108/H 国庆队内训练的题,当时还完全没思路,就没补.现在会树状数组了,倒是能想一想,不过网上题解好多用线段树传数组的? ...

  3. 牛客国庆集训派对Day6 A Birthday 费用流

    牛客国庆集训派对Day6 A Birthday:https://www.nowcoder.com/acm/contest/206/A 题意: 恬恬的生日临近了.宇扬给她准备了一个蛋糕. 正如往常一样, ...

  4. 2019牛客国庆集训派对day5

    2019牛客国庆集训派对day5 I.Strange Prime 题意 \(P=1e10+19\),求\(\sum x[i] mod P = 0\)的方案数,其中\(0 \leq x[i] < ...

  5. 牛客多校第3场 J 思维+树状数组+二分

    牛客多校第3场 J 思维+树状数组+二分 传送门:https://ac.nowcoder.com/acm/contest/883/J 题意: 给你q个询问,和一个队列容量f 询问有两种操作: 0.访问 ...

  6. 牛客国庆集训派对Day1 L-New Game!(最短路)

    链接:https://www.nowcoder.com/acm/contest/201/L 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...

  7. 牛客国庆集训派对Day1 L New Game!(堆优化dijkstra+建图)

    链接:https://ac.nowcoder.com/acm/contest/201/L来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言2097 ...

  8. 牛客国庆集训派对Day4 J-寻找复读机

    链接:https://www.nowcoder.com/acm/contest/204/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...

  9. 牛客多校第五场 J:Plan

    链接:https://www.nowcoder.com/acm/contest/143/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

随机推荐

  1. python html css 初识

    ##################总结############ 浏览器发请求 --> HTTP协议 --> 服务端接收请求 --> 服务端返回响应 --> 服务端把HTML文 ...

  2. Mysql数据库进阶之(分表分库,主从分离)

    前言:数据库的优化是一个程序员的分水岭,作为小白我也得去提前学习这方面的数据的 (一)  三范式和逆范式 听起范式这个迟非常专业我来举个简单的栗子: 第一范式就是:  把能够关联的每条数据都拆分成一个 ...

  3. elasticsearch基本概念与查询语法

    序言 后面有大量类似于mysql的sum, group by查询 elk === elk总体架构 https://www.elastic.co/cn/products Beat 基于go语言写的轻量型 ...

  4. Nginx+Tomcat+Https 服务器负载均衡配置

    这篇过气了! 重新补一个:http://www.cnblogs.com/hackyo/p/6809773.html 由于需要,得搭建个nginx+tomcat+https的服务器,搜了搜网上的发现总是 ...

  5. OZCode

    OZCode是一款辅助调试工具,调试linq很方便有点重量级,导致整个项目运行很慢,但是功能很强大. OZCode界面如下:

  6. 【Python】Xml To Excel

    [Python3] 之前做的入门练习里有一题将excel文件转化为xml文件,这回补上逆向转换→xml to excel 用的还是beautifulsoup. 主要还是:①读取待处理文件文本内容 ②处 ...

  7. TS-Node 体验

    [给链接不赘述][提醒坑][想更简单学计算机必须会看懂英语][win让你专注代码未来深入linux][尽管文件恨多,但是我们不去dissect 是永远不会的] https://www.tslang.c ...

  8. 【bzoj 3786】星系探索

    Description 物理学家小C的研究正遇到某个瓶颈. 他正在研究的是一个星系,这个星系中有n个星球,其中有一个主星球(方便起见我们默认其为1号星球),其余的所有星球均有且仅有一个依赖星球.主星球 ...

  9. 20155324 2016-2017-2 《Java程序设计》第2周学习总结

    20155324 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 Java可区分为基本类型(Primitive Type)和类类型(Class Type)两大 ...

  10. vue安装教程总结

    转载:https://blog.csdn.net/sunny1660/article/details/78326548 简介:       vue.js是一套构建用户界面的渐进式框架.比较简洁,用于解 ...