Cod sursa(job #2655848)

Utilizator Razvan48Capatina Razvan Nicolae Razvan48 Data 5 octombrie 2020 19:06:03
Problema Secventa 5 Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
#include <unordered_map>

using namespace std;

const int NMAX = 1 << 20;

unsigned int v[1 + NMAX];

unordered_map<unsigned int, int> hm;

int n;

int calcSecv(int maxim)
{
  int count = 0;
  int nrSecv = 0;

  hm.clear();

  for (int st = 1, dr = 1; dr <= n; dr++)
  {
    hm[v[dr]]++;
    if (hm[v[dr]] == 1)
    {
      count++;
    }

    while (count > maxim)
    {
      hm[v[st]]--;
      if (hm[v[st]] == 0)
      {
        count--;
      }
      st++;
    }

    nrSecv += dr - st + 1;
  }

  return nrSecv;

}

int main()
{
  ifstream in("secv5.in");
  ofstream out("secv5.out");
  int l, u;

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

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

  return 0;
}