Educational Codeforces Round 7-C. Not Equal on a Segment
来源:互联网 发布:淘宝能开刻章店吗 编辑:程序博客网 时间:2024/05/29 18:38
原题链接
类似RMQ问题
用dp[i][j]表示[i-1, i+(1<<j))这个区间内任意一个下标k,使num[k] != num[k-1],先用ST算法对dp数组进行预处理,
对于给定的区间l, r, 和x,
1.l == r则直接判断num[l]和x是否相等.
2.l != r 用dp数组查询[l+1, r]中是否存在k, 使得num[k] != num[k-1],然后再用x和num[k]与num[k-1]比较
#include <bits/stdc++.h>#define maxn 200005using namespace std;int dp[maxn][20], num[maxn];int n, m;void RMQ(){for(int i = 1; (1<<i) <= n; i++) for(int j = 2; (j + (1<<i)) <= n+1; j++){ int k1 = dp[j][i-1], k2 = dp[j+(1<<(i-1))][i-1]; if(num[k1] != num[k1-1]) dp[j][i] = dp[j][i-1]; else dp[j][i] = dp[j+(1<<(i-1))][i-1]; }}int Query(int l, int r){int k = 0;while(1<<(k+1) <= r - l + 1) k++;int k1 = dp[l][k], k2 = dp[r-(1<<k)+1][k];if(num[k1] != num[k1-1]) return k1;else return k2;}int main(){//freopen("in.txt", "r", stdin);scanf("%d%d", &n, &m);for(int i = 1; i <= n; i++){scanf("%d", num+i);dp[i][0] = i;}RMQ();int l, r, x;while(m--){scanf("%d%d%d", &l, &r, &x);if(r == l){if(num[l] != x) printf("%d\n", l);else puts("-1");}else if(l != r){int k = Query(l+1, r);if(num[k] != x) printf("%d\n", k);else if(num[k-1] != x) printf("%d\n", k-1);else puts("-1");}}return 0;}
0 0
- Educational Codeforces Round 7--C. Not Equal on a Segment
- Educational Codeforces Round 7 C. Not Equal on a Segment
- Educational Codeforces Round 7-C. Not Equal on a Segment
- Educational Codeforces Round 7 CF622C Not Equal on a Segment
- Educational Codeforces Round 7 C. Not Equal on a Segment(思维)
- Educational Codeforces Round 7-C. Not Equal on a Segment(模拟)
- Educational Codeforces Round 7 C. Not Equal on a Segment 并查集
- Codeforces 622 C. Not Equal on a Segment
- CodeForces 622 C. Not Equal on a Segment(水~)
- CodeForces 622C Not Equal on a Segment
- CodeForces 622C Not Equal on a Segment
- Codeforces 622C Not Equal on a Segment
- CodeForces 622C F - Not Equal on a Segment
- Not Equal on a Segment CodeForces
- Not Equal on a Segment CodeForces
- Not Equal on a Segment CodeForces
- Not Equal on a Segment CodeForces
- 7_6_S题 Not Equal on a Segment题解 [codeforces 622C] (贪心)
- spring整合struts2
- API文档使用方法
- 【hibernate】关联映射那些事(四)----继承映射
- PowerDesigner连接MySQL失败的解决方式
- 【u032】均衡发展
- Educational Codeforces Round 7-C. Not Equal on a Segment
- JavaEE框架——Springmvc的使用
- (18)Struts2_通用标签
- Ubuntu常用指令与快捷键
- 剑指offer系列-T40找出数组中只出现一次的2个数
- Unity3D Mesh小课堂(一)三角形
- 【RMQ算法】ST表
- Python 网络爬虫 002 (入门) 爬取一个网站之前,要了解的知识
- 【20160904】NOIP模拟赛T4