CodeForces 622C Not Equal on a Segment(并查集)
2016-04-14 22:58
477 查看
题意:有n个数,然后m个询问,每次询问给你l,r,x,让你找到一个位置k,使得a[k]!=x,且l<=k<=r
思路:并查集,我们将a[i]=a[i-1]的合并在一起
#include<bits/stdc++.h> using namespace std; const int maxn = 1e6+10; int a[maxn]; int pre[maxn]; int Find(int x) { return x==pre[x]?x:pre[x]=Find(pre[x]); } int main() { int n,m; scanf("%d%d",&n,&m); for (int i = 1;i<=n;i++) pre[i]=i; for (int i = 1;i<=n;i++) { scanf("%d",&a[i]); if (a[i]==a[i-1]) { int u = Find(i); int v = Find(i-1); if (u!=v) pre[u]=v; } } for (int i = 1;i<=m;i++) { int flag = 0; int l,r,x; scanf("%d%d%d",&l,&r,&x); int temp = r; while (l<=temp) { if (a[temp]!=x) { printf("%d\n",temp); flag=1; break; } temp = Find(temp)-1; } if (flag==0) printf("-1\n"); } }
Description
You are given array a with n integers and m queries. The i-th query is given with three integers li, ri, xi.
For the i-th query find any position pi (li ≤ pi ≤ ri) so that api ≠ xi.
Input
The first line contains two integers n, m (1 ≤ n, m ≤ 2·105) — the number of elements in a and the number of queries.
The second line contains n integers ai (1 ≤ ai ≤ 106) — the elements of the array a.
Each of the next m lines contains three integers li, ri, xi (1 ≤ li ≤ ri ≤ n, 1 ≤ xi ≤ 106) — the parameters of the i-th query.
Output
Print m lines. On the i-th line print integer pi — the position of any number not equal to xi in segment [li, ri] or the value - 1 if there is no such number.
Sample Input
Input
6 4
1 2 1 1 3 5
1 4 1
2 6 2
3 4 1
3 4 2
Output
2
6
-1
4
相关文章推荐
- 从主文件中读取n个子文件夹中的图片(每一子文件中有两个文件夹,每两个文件中有18张图片)
- 优秀项目集合
- 结队2.0
- 【瞎想】如果需要更高并发
- 结队--复利计算再升级
- Java实现线程的两种方式
- 高情商聊天事例
- mysql 查看没提交的事务 或者 琐行
- Servlet-请求与响应
- cocos2dx抗锯齿问题
- Shell Spawning->2016-01-29 • Nots • 0 条评论 • luom •67 views
- 0414——复利计算再升级
- 复利计算--结对2.0
- 复利计算准备升级版
- cf 333b
- [android] 数据的异步加载和图片保存
- 进程通信 (命名管道 单向通信)
- 利用CountDownTimer巧妙地实现倒计时功能
- CVE-2015-8660 Overlay文件系统文件权限检查缺陷漏洞
- 10个C语言常见未定义与执行结果