Cod sursa(job #2730688)

Utilizator Alex_tz307Lorintz Alexandru Alex_tz307 Data 26 martie 2021 18:09:00
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;
using int64 = long long;

ifstream fin("secv5.in");
ofstream fout("secv5.out");

const int mod = 196613;
const int NMAX = 1 << 20 | 1;
int N, L, U, cnt;
unsigned a[NMAX];
vector<pair<unsigned,int>> Hash[mod];

void add(int x, int type) {
  int key = x % mod;
  for (auto &it : Hash[key])
    if (it.first == x) {
      it.second += type;
      if (it.second == 0)
        --cnt;
      return;
    }
  ++cnt;
  Hash[key].emplace_back(x, 1);
}

void clear_hash() {
  for (int key = 0; key < mod; ++key)
    Hash[key].clear();
}

int64 solve(int K) { /// Cate secvente au maxim K elemente distincte?
  if (K == 0)
    return 0;
  if (K == L - 1)
    clear_hash();
  int l = 1;
  cnt = 0;
  int64 ans = 0;
  for (int r = 1; r <= N; ++r) {
    add(a[r], 1);
    while (cnt > K)
      add(a[l++], -1);
    ans += r - l + 1;
  }
  return ans;
}

void close_files() {
  fin.close();
  fout.close();
}

int main() {
  fin >> N >> L >> U;
  for (int i = 1; i <= N; ++i)
    fin >> a[i];
  fout << solve(U) - solve(L - 1) << '\n';
  close_files();
  return 0;
}