Cod sursa(job #2988857)

Utilizator Alex_tz307Lorintz Alexandru Alex_tz307 Data 5 martie 2023 15:59:06
Problema Pq Scor 100
Compilator cpp-64 Status done
Runda Arhiva ICPC Marime 1.15 kb
#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;
}