Pagini recente » Cod sursa (job #1245758) | Cod sursa (job #584508) | Cod sursa (job #141009) | Cod sursa (job #627940) | Cod sursa (job #1710167)
#include<bits/stdc++.h>
using namespace std;
typedef struct lol {
int x,y,id;
friend bool operator < (const lol &a,const lol &b) {
if(a.x==b.x) return a.y<b.y;
return a.x<b.x;
}
}troll;
int i,j,n,m,x,y,a[100005],R[100005],L[100005],last[100005],rs,ans[100005],arb[400005];
troll q[100005];
void update(int left,int right,int nod) {
if(left==right) arb[nod]=y;
else {
int pivot=(left+right)/2;
if(x<=pivot) update(left,pivot,2*nod);
else update(pivot+1,right,2*nod+1);
arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
}
void query(int left,int right,int nod) {
if(x<=left && right<=y) rs=max(rs,arb[nod]);
else {
int pivot=(left+right)/2;
if(x<=pivot) query(left,pivot,2*nod);
if(y>pivot) query(pivot+1,right,2*nod+1);
}
}
int main()
{
ifstream cin("pq.in");
ofstream cout("pq.out");
ios_base::sync_with_stdio(0); cin.tie(0);
cin>>n>>m;
for(i=1;i<=n;++i) cin>>a[i],++a[i];
for(i=1;i<=m;++i) cin>>q[i].x>>q[i].y,q[i].id=i;
sort(q+1,q+m+1);
for(i=1;i<=n;++i)
{
if(last[a[i]]) L[i]=last[a[i]];
x=i; y=(!L[i]) ? -1:i-L[i]; update(1,n,1);
last[a[i]]=i;
}
memset(last,0,sizeof(last));
for(i=n;i;--i)
{
if(last[a[i]]) R[i]=last[a[i]];
last[a[i]]=i;
}
for(i=j=1;i<=m;++i)
{
while(j<q[i].x)
{
x=R[j]; y=-1;
if(R[j]) update(1,n,1);
++j;
}
rs=-1; x=q[i].x; y=q[i].y; query(1,n,1); ans[q[i].id]=rs;
}
for(i=1;i<=m;++i) cout<<ans[i]<<'\n';
return 0;
}