Cod sursa(job #1737991)

Utilizator Bodo171Bogdan Pop Bodo171 Data 5 august 2016 15:11:08
Problema Pq Scor 100
Compilator cpp Status done
Runda Arhiva ICPC Marime 1.32 kb
#include <iostream>
#include<fstream>
#include<vector>
//Hi I'm Bodo
using namespace std;
const int nmax=100005;
vector< pair<int,int> > v[nmax];
int arb[4*nmax],lst[nmax],i,j,n,val,poz,rasp,ans[nmax],st,a[nmax],x,y,m;
void update(int nod,int l,int r)
{
    if(l==r)
    {
        arb[nod]=val;
        return;
    }
    int m=(l+r)/2;
    if(poz<=m) update(2*nod,l,m);
    else update(2*nod+1,m+1,r);
    arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
void query(int nod,int l,int r)
{
    if(st<=l)
    {
        if(arb[nod]>rasp)
            rasp=arb[nod];
        return;
    }
    int m=(l+r)/2;
    if(st<=m) query(2*nod,l,m);
    query(2*nod+1,m+1,r);
}
int main()
{
    ifstream f("pq.in");
    ofstream g("pq.out");
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>a[i];
    }
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        v[y].push_back(make_pair(x,i));
    }
    for(i=1;i<=n;i++)
    {
        val=i-lst[a[i]];
        poz=lst[a[i]];
        if(poz!=0)
            update(1,1,n);
        lst[a[i]]=i;
        for(j=0;j<v[i].size();j++)
        {
            rasp=0;
            st=v[i][j].first;
            query(1,1,n);
            if(rasp==0) rasp=-1;
            ans[v[i][j].second]=rasp;
        }
    }
    for(i=1;i<=m;i++)
        g<<ans[i]<<'\n';
    return 0;
}