Cod sursa(job #2634354)

Utilizator betybety bety bety Data 10 iulie 2020 18:01:15
Problema Pq Scor 100
Compilator cpp-64 Status done
Runda Arhiva ICPC Marime 0.93 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("pq.in");
ofstream out("pq.out");
const int lim=1e5+4;
int l[lim],sol[lim];
int a[lim],v[lim];
int n,m;
struct help
{
    int l,r,i;
    bool operator<(const help& other) const
    {return l<other.l;}
}q[lim];
void add(int k,int x)
{
    for(;k<=n;k+=k&-k)
        v[k]=max(v[k],x);
}
int maxim(int k)
{
    int ans=0;
    for(;k;k-=k&-k)
        ans=max(ans,v[k]);
    return ans;
}
int main()
{
    in>>n>>m;
    for(int i=1;i<=n;++i)
        in>>a[i];
    for(int i=1;i<=m;++i)
        in>>q[i].l>>q[i].r,q[i].i=i;
    sort(q+1,q+m+1);
    int j=m;
    for(int i=n;i>=1;--i)
    {
        if(l[a[i]]!=0)
            add(l[a[i]],l[a[i]]-i);
        l[a[i]]=i;
        while(j>0 and q[j].l==i)
            sol[q[j].i]=maxim(q[j].r),--j;
    }
    for(int i=1;i<=m;++i)
    if(sol[i]==0) out<<-1<<'\n';
    else out<<sol[i]<<'\n';
    return 0;
}