题目链接:http://codeforces.com/problemset/problem/622/C
题意:给出一个大小为n的序列,给出一个区间[l,r]和c要求找出一个该区间内和c不一样的数,没有则输出-1
思路:将序列中相邻的数合并,因为是找不同的数,所以时间一下就得到了优化……
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int s[200030],sc[200030];
int main()
{
int n,m;
while (scanf("%d%d",&n,&m)!=EOF)
{
for (int i=1;i<=n;i++)
scanf("%d",&s[i]);
sc[n]=n;
for (int i=n-1;i>0;i--)
{
if (s[i]==s[i+1])
sc[i]=sc[i+1];
else
sc[i]=i;
}
for (int i=0;i<m;i++)
{
int l,r,x,flag=1;
scanf("%d%d%d",&l,&r,&x);
for (int j=l;j<=r;j++)
{
int y=sc[j];
if (s[y]==x)
{
j=y;
}
else
{
flag=0;
printf("%d\n",j);
break;
}
}
if (flag) printf("-1\n");
}
}
}