Pagini recente » Cod sursa (job #2167287) | Cod sursa (job #3137857) | Cod sursa (job #720000) | Cod sursa (job #899172) | Cod sursa (job #2988857)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("pq.in");
ofstream fout("pq.out");
const int kN = 1e5;
int n, q, a[1 + kN], last[kN], aib[1 + kN], sol[kN];
vector<pair<int, int>> queries[1 + kN];
void maxSelf(int &x, int y) {
if (x < y) {
x = y;
}
}
void update(int x, int v) {
for (int i = x; i > 0; i = i & (i - 1)) {
maxSelf(aib[i], v);
}
}
int query(int x) {
int res = -1;
for (int i = x; i <= n; i += i & -i) {
maxSelf(res, aib[i]);
}
return res;
}
int main() {
fin >> n >> q;
for (int i = 1; i <= n; ++i) {
fin >> a[i];
}
for (int i = 0; i < q; ++i) {
int l, r;
fin >> l >> r;
queries[r].emplace_back(l, i);
}
for (int i = 1; i <= n; ++i) {
aib[i] = -1;
}
for (int r = 1; r <= n; ++r) {
if (last[a[r]]) {
update(last[a[r]], r - last[a[r]]);
}
last[a[r]] = r;
for (auto it : queries[r]) {
int l, index;
tie(l, index) = it;
sol[index] = query(l);
}
}
for (int i = 0; i < q; ++i) {
fout << sol[i] << '\n';
}
fin.close();
fout.close();
return 0;
}