题意:给出n个<=1e6的数,每次询问l,r,x,输出区间[l,r]中第一个不等于x的数的下标.
记录每个位置左边第一个不相同的数即可
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5;
int a[2*maxn];
int f[maxn*2][2];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
memset(f,-1,sizeof(f));
int tot=1;
int shang=a[1];
for(int i=2;i<=n;i++)
{
if(a[i]!=shang)
{
f[i][0]=tot;
tot=i;
shang=a[i];
}
else
{
tot=i;
f[i][0]=f[i-1][0];
}
}
for(int i=0;i<m;i++)
{
int l,r,x;
scanf("%d%d%d",&l,&r,&x);
if(a[r]==x){
if(f[r][0]>=l&&f[r][0]!=-1)
{
printf("%d\n",f[r][0]);
}
else
printf("-1\n");
}
else printf("%d\n",r);
}
}