V-Parenthesis 前缀+ZKW线段树或RMQ
来源:互联网 发布:淘宝开店 pdf 编辑:程序博客网 时间:2024/05/16 10:21
题意就是给出一个正确配对的括号序列,问交换两个括号以后是否依旧正确配对,一般括号配对都可以使用遇到左括号加一,遇到右括号减一的方法,中间过程中不能出现负值,否则配对失败,这道题也可以这样做,先求出前缀和,如:
编号: 1 2 3 4 5 6 7 8
( ( ( ) ) ) ( )
前缀: 1 2 3 2 1 0 1 0
有两种仍然可以配对的交换:1.当交换的两个括号相同时,2.ai是右括号,bi是左括号时,根据示例可以看出;
唯一一种可能发生不配对的交换:ai是左括号,bi是右括号;当有右括号加入ai位置时,从ai位置到bi-1位置的前缀和全部都要减2,所以ai到bi-1区间内最小值至少为2,这样就变成了查询区间最小值问题了,可以用线段树,也可以RMQ(代码待补);因为刚刚学习线段树,又刚好听说ZKW线段树代码比较精简,所以临时现去学习了一下,结果发现好多给的示例代码都是错的。。。这个版本可能也有错,但是AC了就好。。。哈哈哈哈哈哈哈哈哈嗝。。。。
zkw线段树:
#include
b) swap(a,b); if(ch[a]==ch[b] || (ch[a]==')'&&ch[b]=='(')){ printf("Yes\n"); continue; } int ret = Query(a,b-1); printf("%s\n",ret>=2?"Yes":"No"); } } return 0;}
RMQ:
#include#include #include using namespace std;const int N = 100000 + 5;const int INF = (1<<28);int sum[N],dp[N][32],cnt,n;char ch[N];void RMQ_Init(){ memset(dp,0,sizeof(dp)); for(int i=0;i b) swap(a,b); if(ch[a]==ch[b] || (ch[a]==')'&&ch[b]=='(')){ printf("Yes\n"); continue; } int ret = RMQ(a,b-1); printf("%s\n",ret>=2?"Yes":"No"); } } return 0;}
- V-Parenthesis 前缀+ZKW线段树或RMQ
- CSU 1809 Parenthesis(RMQ||线段树)
- zkw线段树解决区间rmq
- poj 3264 RMQ问题 zkw线段树
- 区间rmq的zkw线段树
- 数据结构颓废计划V-ZKW线段树
- [CSU 1809: Parenthesis] 线段树/RMQ处理括号序列
- #bzoj3186#单点修改的RMQ问题(zkw线段树版)
- #bzoj3187#区间修改的RMQ问题(zkw线段树版)
- CSU 1809 Parenthesis 【前缀和+RMQ】
- CSU 1809 Parenthesis 思维,前缀RMQ
- CSU 1809 Parenthesis(线段树前缀和)
- 【CSU1809】Parenthesis(线段树 + 贪心 + 前缀和)
- zkw线段树 运用
- 【zkw线段树】ural1855
- ZKW线段树
- POJ3468 ZKW线段树
- ZKW线段树
- 暑期集训 WEEK3
- 8_10教务管理系统
- JavaScript操作BOM
- 和为s的两个数字VS和为s的连续正数序列
- 51nod 1424 零树(树形dp)
- V-Parenthesis 前缀+ZKW线段树或RMQ
- 数组、List和ArrayList的区别
- Rikka with Graph(HDU 6090)
- QGraphicsView 如何实现百度地图按照鼠标点进行放大缩小效果
- 在VS2013环境下使用EF框架与Sqlite(二)
- SQL Server 检测到基于一致性的逻辑 I-O 错误 pageid 不正确
- 1015. 德才论
- 在java web项目中调用c++的dll程序简单案例
- python 中文路径带来的错误和解决