• codeforces 622C C. Not Equal on a Segment


    C. Not Equal on a Segment
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    You are given array a with n integers and m queries. The i-th query is given with three integers li, ri, xi.

    For the i-th query find any position pi (li ≤ pi ≤ ri) so that api ≠ xi.

    Input

    The first line contains two integers n, m (1 ≤ n, m ≤ 2·105) — the number of elements in a and the number of queries.

    The second line contains n integers ai (1 ≤ ai ≤ 106) — the elements of the array a.

    Each of the next m lines contains three integers li, ri, xi (1 ≤ li ≤ ri ≤ n, 1 ≤ xi ≤ 106) — the parameters of the i-th query.

    Output

    Print m lines. On the i-th line print integer pi — the position of any number not equal to xi in segment [li, ri] or the value  - 1 if there is no such number.

    Sample test(s)
    input
    6 4
    1 2 1 1 3 5
    1 4 1
    2 6 2
    3 4 1
    3 4 2
    output
    2
    6
    -1
    4

     题意:给你一个数组,然后m条询问,在l[i]到r[i]之间是否存在一个数不等于x[i],存在输出这个数的位置,不然输出-1;

     思路:开一个fa数组,记录与这个数一直不间断相同的数的位置,相当于把相同的数合并,在查找的时候就省事了,开始直接暴力是过不了的;

     AC代码:

    #include <bits/stdc++.h>
    using namespace std;
    const int N=1e6+5;
    int n,m,a[N],fa[N],l,r,x;
    int solve(int le,int ri,int ans)
    {
    int fx;
    for(int i=le;i<=ri;)
    {
    if(fa[i]<=ri)fx=fa[i];
    else fx=ri;
    if(a[fx]!=ans)return fx;
    i=fx+1;
    }
    return -1;
    }
    int main()
    {
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
    scanf("%d",&a[i]);
    }
    fa[n]=n;
    for(int i=n-1;i>0;i--)
    {
    if(a[i]==a[i+1])fa[i]=fa[i+1];
    else fa[i]=i;
    }
    while(m--)
    {
    scanf("%d%d%d",&l,&r,&x);
    printf("%d ",solve(l,r,x));
    }
    return 0;
    }

  • 相关阅读:
    [HAOI2008]糖果传递
    [HAOI2008]木棍分割
    [HAOI2008]硬币购物
    [ZJOI2008]泡泡堂
    [JSOI2007]建筑抢修
    [JSOI2007]麻将
    [Note]prufer
    [BZOJ3275]Number
    [POI2014]RAJ-Rally
    [JSOI2010]快递服务
  • 原文地址:https://www.cnblogs.com/zhangchengc919/p/5186388.html
Copyright © 2020-2023  润新知