Cod sursa(job #2081886)

Utilizator dahaandreiDaha Andrei Codrin dahaandrei Data 5 decembrie 2017 12:23:08
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#include <unordered_map>
#include <cassert>

using namespace std;

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

int n, l, u, v[1050000];

int nr_subSecv(int lim){
  int cnt_elem = 0, cnt_subSecv = 0, dr = 1, st = 1;
  unordered_map <int, int>fr;
  for (int i = 1; i <= n; ++ i){
    fr[v[i]] ++;
    if (fr[v[i]] == 1)
      cnt_elem ++;
    dr = i;
    while (cnt_elem > lim){
      fr[v[st]] --;
      if (fr[v[st]] == 0){
        cnt_elem --;
        fr.erase(v[st]);
      }
      st ++;
    }
    //assert(dr >= st);
    cnt_subSecv += dr - st + 1;
  }

  return cnt_subSecv;
}

int main(){
  in >> n >> l >> u;
  for (int i = 1; i <= n; ++ i)
    in >> v[i];

  out << nr_subSecv(u) - nr_subSecv(l - 1);

  return 0;
}