Cod sursa(job #1990287)

Utilizator DjokValeriu Motroi Djok Data 11 iunie 2017 12:05:31
Problema Secventa 5 Scor 90
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 0.84 kb
#include <bits/stdc++.h>
using namespace std;

const int N = 1234567;

int i, n, l, u, nr, freq[N];
long long a[N];
unordered_map<long long, int> M;
unordered_set<long long> S;

long long solve(int nr) {
  long long ans = 0;
  int cnt = 0, i, j = 1;

  for(i = 1; i <= n; ++i) {
    ++freq[a[i]];
    if(freq[a[i]] == 1) ++cnt;

    while(cnt > nr) {
      --freq[a[j]]; ++j;
      if(!freq[a[j - 1]]) --cnt;
    }

    ans += i - j + 1;
  }

  while(j <= n) --freq[a[j]], ++j;

  return ans;
}

int main() {
  ifstream cin("secv5.in");
  ofstream cout("secv5.out");
  ios_base::sync_with_stdio(0);

  cin >> n >> l >> u;
  for(i = 1; i <= n; ++i) cin >> a[i], S.insert(a[i]);

  for(auto it : S) M[it] = ++nr;

  for(i = 1; i <= n; ++i) a[i] = M[a[i]];

  cout << solve(u) - solve(l - 1) << '\n';

  return 0;
}