Cod sursa(job #3245446)

Utilizator n6v26rDedu Razvan Matei n6v26r Data 29 septembrie 2024 01:49:51
Problema Secventa 5 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <stdio.h>
#include <unordered_map>

#define MAXN (1<<20)

std::unordered_map<unsigned int, int> ap;

int n;

int min;
int max;

unsigned int v[MAXN];

long long solve(int limit){
  ap.clear();
  int d=0, s=0;
  long long total = 0;
  int dif = 0;
  while(d<n){
    if(ap[v[d]]==0)
      dif++;
    ap[v[d]]++;

    while(dif>limit){
      ap[v[s]]--;
      if(ap[v[s]]==0)
        dif--;
      s++;
    }
    total += (d-s+1);
    d++;
  }
  return total;
}

int main(){
  FILE *fin, *fout;
  fin = fopen("secv5.in", "r");
  fscanf(fin, "%d%d%d", &n, &min, &max);
  for(int i=0; i<n; i++)
    fscanf(fin, "%u\n", &v[i]);
  fclose(fin);
  
  fout = fopen("secv5.out", "w");
  fprintf(fout, "%lld\n", solve(max)-solve(min-1)); 
  fclose(fout);
  return 0;
}