Cod sursa(job #2326943)

Utilizator ApostolIlieDanielApostol Daniel ApostolIlieDaniel Data 24 ianuarie 2019 11:52:39
Problema Secventa 5 Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>

using namespace std;

#define ll long long

const int MAXN = 1e5;

unordered_map <ll, int> car;
ll a[MAXN + 1];
int n;
ll solve (int k) {
  int st, dr, nr_dist;
  ll sol;
  if (k == 0)
    return 0;
  car.clear ();
  st = 1;
  dr = 1;
  nr_dist = 1;
  car[a[1]]++;
  sol = 0;
  while (st <= n) {
    while (dr < n && ((car[a[dr + 1]] > 0 && nr_dist <= k) || (car[a[dr + 1]] == 0 && nr_dist < k))) {
      dr++;
      if (car[a[dr]] == 0)
        nr_dist++;
      car[a[dr]]++;
    }
    sol = sol + (dr - st + 1);
    car[a[st]]--;
    if (car[a[st]] == 0)
      nr_dist--;
    st++;
  }
  return sol;
}

int main() {
  int p, q, i;
  freopen ("secv5.in", "r", stdin);
  freopen ("secv5.out", "w", stdout);

  scanf ("%d%d%d", &n, &p, &q);

  for (i = 1; i <= n; i++)
    scanf ("%lld", &a[i]);

  printf ("%lld\n", solve (q) - solve (p - 1));

  return 0;
}