题意:给你n个数,m次查询,每次查询给你l,r,x让你在区间中找到任何一个不为x的数即可,找到输出,否则输出-1
思路:只需要开一个pre数组,记录第i个数前面第一个和他不等的数的下标就可以了,如果相等pre[i]=pre[i-1],然后每次对(l,r)查询时从最右端开始查找和x比对即可.
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int a[maxn*2],pre[2*maxn];
int n,m;
int main()
{
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(pre,0,sizeof(pre));
for(int i=2;i<=n;i++)
{
if(a[i]!=a[i-1])
pre[i]=i-1;
else
pre[i]=pre[i-1];
}
int l,r,x;
for(int i=1;i<=m;i++)
{
scanf("%d %d %d",&l,&r,&x);
int w=r;
int flag=0;
while(w>=l)
{
//cout<<1<<endl;
if(a[w]!=x)
{
flag=1;
printf("%d\n",w);
break;
}
else
w=pre[w];
}
if(!flag)
printf("-1\n");
}
return 0;
}