Pagini recente » Cod sursa (job #741680) | Cod sursa (job #3141343) | Cod sursa (job #894408) | Cod sursa (job #197364) | Cod sursa (job #1737991)
#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;
}