Cod sursa(job #2141292)

Utilizator nerelog25Radu Andrei Stefan nerelog25 Data 24 februarie 2018 11:42:35
Problema Secventa 5 Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <unordered_map>
#include <cassert>

using namespace std;

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

int n, l, u;

unsigned int v[1050000];

long long nr_subSecv(int lim){
  int cnt_elem = 0, dr = 1, st = 1;
  long long cnt_subSecv = 0;
  unordered_map <unsigned 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 += 1LL*(dr - st) + 1LL ;
  }

  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;
}