7.6 SCodeForces 622CNot Equal on a Segment

来源:互联网 发布:aws windows vpn 配置 编辑:程序博客网 时间:2024/05/11 01:47
题意:给出一个数列,m次询问,每次询问区间中与给定的数不相同的数的下标
思路:有题解说用线段树,其实不必,用一个数组存储每个数的前一个不同于自己的数的地址就好了。
代码:
#include <cstdio>#include <cstring>using namespace std;int n,m;int a[200000],b[200000];int main(){    scanf("%d%d",&n,&m);    b[0]=-1;    for(int i=0;i<n;i++){        scanf("%d",&a[i]);        if(i){            if(a[i]!=a[i-1])b[i]=i-1;            else b[i]=b[i-1];        }    }    for(int i=0;i<m;i++){        int l,r,v;        scanf("%d%d%d",&l,&r,&v);        if(n==1){            if(a[0]==v)printf("-1\n");            else printf("1\n");            continue;        }        l--;r--;        if(b[r]<l){            if(a[r]==v)printf("-1\n");            else printf("%d\n",r+1);        }        else {            if(a[r]==v)printf("%d\n",b[r]+1);            else printf("%d\n",r+1);        }    }    return 0;}

0 0