Pagini recente » Cod sursa (job #748848) | Cod sursa (job #2578091) | Cod sursa (job #1136524) | Cod sursa (job #2940365) | Cod sursa (job #1709953)
#include <fstream>
#include <deque>
#include <algorithm>
using namespace std;
ifstream f("pq.in");
ofstream g("pq.out");
long n,i,j,q,rez[100005],lg,st,last[100005],rez2[100005];
deque<int> dq;
struct interval{
long x,y,poz;
}C[100005],Q[100005];
bool comp(interval a,interval b)
{
if (a.y==b.y)
return a.x<b.x;
return a.y<b.y;
}
bool comp2(interval a,interval b)
{
if (a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
int main()
{
f>>n>>q;
for (i=1;i<=n;i++)
{
int x;
f>>x;
if (last[x]!=0)
{
C[++lg].x = last[x];
C[lg].y = i;
}
last[x]=i;
}
for (i=1;i<=q;i++)
{
f>>Q[i].x>>Q[i].y;
Q[i].poz=i;
}
sort(C+1,C+lg+1,comp);
sort(Q+1,Q+q+1,comp2);
st=1;
i=1;
j=1;
while (st<=lg && j<=q)
{
long Max=-1;
while (C[st].x<Q[j].x && C[st].y<=Q[j].y )
st++;
i=st;
while (C[i].y<=Q[j].y )
{
if(C[i].x>=Q[j].x)
Max=max(Max,C[i].y-C[i].x);
i++;
}
rez[j]=Max;
j++;
}
for (i=1;i<=q;i++)
{
if (rez[i]==0)
rez[i]=-1;
rez2[Q[i].poz] = rez[i];
}
for (i=1;i<=q;i++)
g<<rez2[i]<<'\n';
return 0;
}