Pagini recente » Cod sursa (job #1010911) | Cod sursa (job #1291547) | Cod sursa (job #1032337) | Cod sursa (job #1661867) | Cod sursa (job #2246257)
#include<fstream>
#include<algorithm>
#define st first.first
#define dr first.second
#define ind second
using namespace std;
ifstream fi("pq.in");
ofstream fo("pq.out");
pair<pair<int,int>,int> Q[100005];
int A[100005],Lst[100005],Rez[100005],F[100005];
int n,q,ind,i;
void upd(int poz, int val)
{
while(poz<=n)
{
F[poz]=max(F[poz],val);
poz=poz+(poz&(poz^(poz-1)));
}
}
int qu(int poz)
{
int rez=0;
while(poz>=1)
{
rez=max(rez,F[poz]);
poz=poz-(poz&(poz^(poz-1)));
}
return rez;
}
int main()
{
fi>>n>>q;
for(i=1; i<=n; i++)
fi>>A[i];
for(i=1; i<=q; i++)
{
fi>>Q[i].st>>Q[i].dr;
Q[i].ind=i;
}
sort(Q+1,Q+q+1);
ind=q;
for(i=n; i>=1; i--)
{
if(Lst[A[i]]!=0)
upd(Lst[A[i]],Lst[A[i]]-i);
Lst[A[i]]=i;
while(Q[ind].st==i)
{
Rez[Q[ind].ind]=qu(Q[ind].dr);
ind--;
}
}
for(i=1; i<=q; i++)
if(Rez[i]==0)
fo<<"-1\n";
else
fo<<Rez[i]<<"\n";
fi.close();
fo.close();
return 0;
}