Pagini recente » Cod sursa (job #665839) | 11_ian_2014 | Cod sursa (job #74656) | Cod sursa (job #3130167) | Cod sursa (job #1709059)
/*************************************************************\
~*********************ENJOY THE SILENCE***********************~
\*************************************************************/
#include <bits/stdc++.h>
using namespace std;
/*******************Debugging defines*************************/
#define ok_dump() cerr<<"OK\n"
#define var_dump(x) cerr<<#x": "<<x<<'\n'
#define arr_dump(x, n) {cerr<<#x"[]: ";\
for(int _=0;_<n;++_) cerr<<x[_]<<" ";cerr<<'\n';}
/*************************************************************/
int T[500000];
void add(int pos, int val) {
for(;pos;pos-=(pos&-pos))
T[pos] = max(T[pos], val);
}
int query(int pos) {
int s = -1;
for(;pos<=100005;pos+=(pos&-pos))
s = max(s, T[pos]);
if(s == 0) s = -1;
return s;
}
int main() {
// assert(freopen("input.txt", "r", stdin));
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ifstream fin("pq.in");
ofstream fout("pq.out");
int n, q;
fin >> n >> q;
vector<int> V(n + 1, 0);
for(int i = 1; i <= n; ++i) {
fin >> V[i];
}
vector<pair<int, int>> Q(q);
vector<int> I(q), Last(100005, 0);
vector<long long> Ans(q);
for(int i = 0; i < q; ++i) {
int a, b;
fin >> a >> b;
Q[i] = {b, a};
I[i] = i;
}
sort(I.begin(), I.end(), [&Q](int a, int b) {
return Q[a] < Q[b];
});
int right = 0;
for(auto i : I) {
int b = Q[i].first;
int a = Q[i].second;
assert(right <= b);
while(right < b) {
int elem = V[++right];
if(Last[elem])
add(Last[elem], right - Last[elem]);
Last[elem] = right;
}
Ans[i] = query(a);
}
for(auto x : Ans) {
fout << x << '\n';
}
return 0;
}
/*************************************************************\
~*********************ENJOY THE SILENCE***********************~
\*************************************************************/