Pagini recente » Cod sursa (job #2876744) | Cod sursa (job #2507239) | Cod sursa (job #161607) | Cod sursa (job #2535577) | Cod sursa (job #2634354)
Utilizator |
bety bety bety |
Data |
10 iulie 2020 18:01:15 |
Problema |
Pq |
Scor |
100 |
Compilator |
cpp-64 |
Status |
done |
Runda |
Arhiva ICPC |
Marime |
0.93 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream in("pq.in");
ofstream out("pq.out");
const int lim=1e5+4;
int l[lim],sol[lim];
int a[lim],v[lim];
int n,m;
struct help
{
int l,r,i;
bool operator<(const help& other) const
{return l<other.l;}
}q[lim];
void add(int k,int x)
{
for(;k<=n;k+=k&-k)
v[k]=max(v[k],x);
}
int maxim(int k)
{
int ans=0;
for(;k;k-=k&-k)
ans=max(ans,v[k]);
return ans;
}
int main()
{
in>>n>>m;
for(int i=1;i<=n;++i)
in>>a[i];
for(int i=1;i<=m;++i)
in>>q[i].l>>q[i].r,q[i].i=i;
sort(q+1,q+m+1);
int j=m;
for(int i=n;i>=1;--i)
{
if(l[a[i]]!=0)
add(l[a[i]],l[a[i]]-i);
l[a[i]]=i;
while(j>0 and q[j].l==i)
sol[q[j].i]=maxim(q[j].r),--j;
}
for(int i=1;i<=m;++i)
if(sol[i]==0) out<<-1<<'\n';
else out<<sol[i]<<'\n';
return 0;
}