Pagini recente » Cod sursa (job #2517018) | Cod sursa (job #225274) | Cod sursa (job #473751) | Cod sursa (job #70494) | Cod sursa (job #3168734)
#pragma GCC optimize("fast-math")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("O3")
#pragma GCC target("avx2")
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
int n, aib[100005], queries, x, y, v[100005], sol[100005], poz[100005];
vector<pair<int, int> >ans[100005];
int lsb(int x)
{
return (x & (-x));
}
void update(int poz, int val)
{
for(; poz >= 0; poz -= lsb(poz))
{
aib[poz] = max(aib[poz], val);
}
}
int query(int poz)
{
int maxim = -1;
for(; poz <= 100005; poz += lsb(poz))
{
maxim = max(aib[poz], maxim);
}
return maxim;
}
struct mo
{
int st, dr, idx;
bool operator <(const mo &ob) const
{
return dr < ob.dr;
}
}q[100005];
ifstream fin("pq.in");
ofstream fout("pq.out");
int32_t main(int argc, char * argv[])
{
fin >> n >> queries;
for(int i = 1; i <= n; ++i)
{
fin >> v[i];
aib[i] = -1;
}
for(int i = 1; i <= queries; ++i)
{
fin >> x >> y;
q[i].st = x, q[i].dr = y, q[i].idx = i;
ans[q[i].dr].push_back({q[i].st, i});
}
sort(q + 1, q + queries + 1);
for(int stcur = 1; stcur <= n; ++stcur)
{
if(poz[v[stcur]])
{
update(poz[v[stcur]], stcur - poz[v[stcur]]);
}
poz[v[stcur]] = stcur;
for(auto e : ans[stcur])
{
int nr = e.second;
int left = e.first;
sol[nr] = query(left);
}
}
for(int i = 1; i <= queries; ++i)
{
fout << sol[i] << '\n';
}
return 0;
}