问题 H: Princess Principal

时间限制: 2 Sec  内存限制: 1024 MB
提交: 183  解决: 37
[提交] [状态] [讨论版] [命题人:admin]

题目描述

阿尔比恩王国(the Albion Kingdom)潜伏着一群代号“白鸽队(Team White Pigeon)”的间谍。在没有任务的时候,她们会进行各种各样的训练,比如快速判断一个文档有没有语法错误,这有助于她们鉴别写文档的人受教育程度。

这次用于训练的是一个含有n个括号的文档。括号一共有mm种,每种括号都有左括号和右括号两种形式。我们定义用如下的方式定义一个合法的文档:

1.一个空的字符串是一个合法的文档。
2.如果A,B都是合法的文档,那么AB也是合法的文档。
3.如果S是合法的文档,那么aSb也是合法的文档,其中a,b是同一种括号,并且a是左括号,b是右括号。
现在给出q个询问,每次询问只考虑文档第ll至rr个字符的情况下,文档是不是合法的。

输入

第一行两个整数n,m,q(1≤n,m,q≤106)。
第二行有n个空格隔开的整数x,第i个整数xi(0≤xi<m∗2)代表文档中的第i个字符是第⌊x/2⌋种括号,且如果xi是偶数,它代表一个左括号,否则它代表一个右括号。
接下来q行,每行两个空格隔开的整数l,r(1≤l≤r≤n),代表询问第l至r个字符构成的字符串是否是一个合法的文档。

输出

输出共q行,如果询问的字符串是一个合法的文档,输出"Yes",否则输出"No"。

样例输入

6 4 3
0 2 3 1 4 7
1 4
1 5
5 6

样例输出

Yes
No
No

题解:可以用一个数组来记录每个位置与哪个位置进行的配对,然后用栈来模拟配对过程,最后再递推到最多可以配对到的位置即可

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> PII;
const int maxn=1e6+7;
#define inf 0x3f3f3f3fint a[maxn],dp[maxn];int main()
{int n,m,q;scanf("%d%d%d",&n,&m,&q);for(int i=1;i<=n;i++)scanf("%d",&a[i]);stack<pair<int,int> >s;for(int i=1;i<=n;i++){if(s.empty())s.push(make_pair(a[i],i));else if(a[i]/2==s.top().first/2 && a[i]==s.top().first+1){dp[s.top().second]=i;dp[i]=s.top().second;s.pop();}else s.push(make_pair(a[i],i));}for(int i=n;i>=1;i--)if(a[i]%2==0)dp[i]=max(dp[ dp[i]+1 ],dp[i]);for(int i=1;i<=n;i++)if(a[i]%2)dp[i]=min(dp[i],dp[ dp[i]-1  ] );//printf("%d %d\n",dp[2],dp[5]);for(int i=1;i<=q;i++){int l,r;scanf("%d%d",&l,&r);if(dp[l]>=r && dp[r]<=l)printf("Yes\n");elseprintf("No\n");}return 0;
}

upc国庆集训第八天 Princess Principal(思维+栈)相关推荐

  1. 牛客国庆集训派对Day1 J-Princess Principal (区间查询是否是正确的括号匹配)

    链接:https://www.nowcoder.com/acm/contest/201/J 来源:牛客网 阿尔比恩王国(the Albion Kingdom)潜伏着一群代号"白鸽队(Team ...

  2. 牛客国庆集训派对Day6

    牛客国庆集训派对Day6 以下是我个人题解,出题人题解附带在最后 A.Birthday 费用流裸题,只要注意到1+3+5+...+2k−1=k21+3+5+...+2k-1 = k^21+3+5+.. ...

  3. 2019牛客国庆集训派对day2 K 2018(容斥)

    链接:https://ac.nowcoder.com/acm/contest/1107/K 来源:2019牛客国庆集训派对day2 题目描述   Given a, b, c, d, find out ...

  4. 2020牛客国庆集训派对day2 补题J

    2020牛客国庆集训派对day2 补题J:VIRUS OUTBREAK 题目描述 The State Veterinary Services Department recently reported ...

  5. 2020牛客国庆集训派对day3 I.Rooted Tree(哈代-拉马努金拆分数列)

    2020牛客国庆集训派对day3 I.Rooted Tree(哈代-拉马努金拆分数列) 题目 https://ac.nowcoder.com/acm/contest/7830/I 题意 给你n个点,问 ...

  6. 2020牛客国庆集训派对day2 H-STROOP EFFECT(英语题)

    2020牛客国庆集训派对day2 H-STROOP EFFECT(英语题) 题目 https://ac.nowcoder.com/acm/contest/7818/H 题意 这题目真的太难读懂了,赛后 ...

  7. codeforces 148 C. Terse princess(思维,构造)

    C. Terse princess(思维,构造) 题目链接:codeforces 148C 题意:     有个公主找王子,如果这个人比之前所有王子的财富都高,公主就会Oh,              ...

  8. 2020牛客国庆集训派对day8 G-Shuffle Cards(扩展STL容器,rope可持久化平衡树)

    2020牛客国庆集训派对day8 G-Shuffle Cards(扩展STL容器,rope可持久化平衡树) 题目 https://ac.nowcoder.com/acm/contest/7865/G ...

  9. 2016湖南湘潭邀请赛 - 2019牛客国庆集训派对day6

    2016湖南湘潭邀请赛 - 2019牛客国庆集训派对day6 A - 2016 题意:求一个2阶矩阵的n次幂,对7取模的结果 思路:可以用上面介绍的10进制倍增的方法.也可以用 n 对2016取模,还 ...

最新文章

  1. 面试官问我,使用Dubbo有没有遇到一些坑?我笑了。
  2. JavaScript强化教程-JS面向对象编程
  3. 超高损人技巧~~不可不看
  4. php 定义数字int,php中的int参数
  5. 【C++学习】String类的基本用法
  6. CodeForces - 1300E Water Balance(贪心)
  7. 学成在线--16.添加课程计划
  8. 正月初六 | 2月17日 星期二 | 快手体育拿下斯诺克赛事版权;华为推出“智慧养猪”方案;春节档总票房突破60亿元...
  9. php软件开发--php基础
  10. 计算机桌面图标有小纸张,电脑桌面图标上都有个小图标,为什么
  11. 生意人没有“攀比”的目标,会过的很迷茫
  12. CCF201709-2 公共钥匙盒(100分)【模拟+优先队列】
  13. halcon-高速下载
  14. oracle数据库基础笔试题,Oracle数据库入门笔试试题及参考答案
  15. laravel-admin使用教程
  16. 2019-12-19
  17. Linux安全模块(LSM)
  18. Android安装应用后点击打开(Open)带来的问题及解决方式
  19. STK11.2 计算卫星A关于卫星B的相对位置 (三维和二维)
  20. C# 操作word表格合并单元格

热门文章

  1. 在linux下 nasm 编译,Ubuntu上安装nasm以及nasm在Ubuntu上的简单使用
  2. 二维数组或三维数组转换为一维数组
  3. matlab call lapack,科学网—fortran lapack的dgesvd和matlab SVD结果不一致,请大神指点! - 周锋的博文...
  4. 承认吧星巴克,你就是个卖杯子的
  5. 制定项目计划,确保团队协同效率
  6. java ftpclient 代码_使用FTPClient连接文件服务器并做相应操作(代码)
  7. 什么是相对路径什么是绝对路径?
  8. Revit 2019 LookUp安装详解
  9. LUA CallInfo结构,StkId结构解析
  10. EMW Tool Box 4.1 更改域名和端口讲解