codeforces 622C

来源:互联网 发布:网络程蝶依视频 编辑:程序博客网 时间:2024/06/07 12:17

题意:给出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);    }}
原创粉丝点击