Cod sursa(job #1566314)

Utilizator ericptsStavarache Petru Eric ericpts Data 11 ianuarie 2016 23:08:18
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <iostream>
#include <unordered_map>

using namespace std;

unordered_map<int, int> H;

const int MAX_N = (1 << 20) + 10;

int lo[MAX_N],
    hi[MAX_N];

int v[MAX_N];

int n;

int l, h;

void process(int l, int * p) {
  H.clear();
  int lo = 1;
  for(int i = 1; i <= n; ++i) {
    if(!H.count(v[i]))
      H[v[i]] = 1;
    else
      H[v[i]]++;

    while((int)H.size() > l) {
      H[v[lo]]--;
      if(H[v[lo]] == 0)
        H.erase(v[lo]);
      lo++;
    }

    if((int)H.size() == l)
      p[i] = lo;
    else
      p[i] = 0;
  }
}

int main() {
  ifstream in("secv5.in");
  in >> n >> l >> h;
  for(int i = 1; i <= n; ++i)
    in >> v[i];
  in.close();

  process(l, lo);
  process(h, hi);

  long long sol = 0;

  for(int i = 1; i <= n; ++i) {
    if(lo[i])
      sol += lo[i] - hi[i] + 1;
  }
  
  ofstream out("secv5.out");
  out << sol << "\n";
  out.close();
  return 0;
}