Cod sursa(job #1971318)

Utilizator SirbuSirbu Ioan Sirbu Data 20 aprilie 2017 11:21:08
Problema Secventa 5 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>
#include <vector>
#define NMAX (( 1 << 20) + 2)
#include <unordered_map>

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

unsigned int v[NMAX];
unordered_map < unsigned int, int > ap;
unordered_map < unsigned int, int > ap1;

int main (){

  int l, u, n;
  fin >> n >> l >> u;
  for (int i = 1; i <= n; ++i)
    fin >> v[i];

  int st = 1;
  long long rez1 = 0;
  for (int dr = 1; dr <= n; ++dr){
    ap[v[dr]]++;
    while (ap.size() > u){
      ap[v[st]]--;
      if (!ap[v[st]])
        ap.erase(v[st]);
      st++;
    }
    rez1 = rez1 + dr - st + 1;
  }

  st = 1;
  long long rez2 = 0;
  for (int dr = 1; dr <= n; ++dr){
    ap1[v[dr]]++;
    while (ap1.size() >= l){
      ap1[v[st]]--;
      if (!ap1[v[st]])
        ap1.erase(v[st]);
      st++;
    }
    rez2 = rez2 + dr - st + 1;
  }

  fout << rez1 - rez2 << "\n";
  return 0;
}