CodeForces 622C

题意:
给你一个数组,m个询问,l,r,x;让你输出在区间[ l , r ]上哪个位置不等于x。
思路:
额。。我这个思路还是剽来的。。。不过真心赞啊。
开个p数组,直接记录数组每个元素的位置,并且实现是最右。
然后对于每个查询,直接询问下限位置的a[ i ]是否等于x,不等于直接输出,等于的话调用p数组,就可以知道,最右啊,然后判断一下最右+1是否<=上限。然后就好啦。这种效率超级提高啊。长见识,长见识。

code…

//#include <bits/stdc++.h>
#include<cstdio>
#include<iostream>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
const double eps=1e-6;
const double pi=acos(-1.0);
const int mod=998244353;
const int INF=0x3f3f3f3f;

const int N=1e5+10;

int a[N*2];
int p[N*2];

int main()
{
    int s,t,x,n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    p[n]=n;
    for(int i=n-1;i>=1;i--)
    {
        if(a[i]==a[i+1])
            p[i]=p[i+1];
        else
            p[i]=i;
    }
    for(int i=0;i<m;i++)
    {
        scanf("%d%d%d",&s,&t,&x);
        if(a[s]!=x){
            printf("%d\n",s);
        }
        else{
            if(p[s]+1<=t)
                printf("%d\n",p[s]+1);
            else
                printf("-1\n");
        }
    }
}


posted @ 2016-07-11 21:45  see_you_later  阅读(141)  评论(0编辑  收藏  举报