Pagini recente » Cod sursa (job #533366) | Autentificare | Istoria paginii runda/564/clasament | Istoria paginii runda/tema_4 | Cod sursa (job #3245445)
#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];
int sp[MAXN];
long long solve(int limit){
int d=0, s=0;
long long total = 0;
while(s<n){
while(d<n && sp[d]-sp[s]+1<=limit){
/*printf("%d: %d %d\n", limit, s, d);*/
d++;
}
total += (d-s);
s++;
}
/*printf("=>%d\n", total);*/
return total;
}
int main(){
FILE *fin, *fout;
fin = fopen("secv5.in", "r");
fscanf(fin, "%u%u%u", &n, &min, &max);
for(int i=0; i<n; i++){
fscanf(fin, "%u\n", &v[i]);
sp[i] = (i>0?sp[i-1]:0)+(ap.count(v[i])==0);
ap[v[i]]++;
}
fclose(fin);
fout = fopen("secv5.out", "w");
fprintf(fout, "%lld\n", solve(max)-solve(min-1));
fclose(fout);
return 0;
}