Pagini recente » Clasamentul arhivei Infoarena Monthly | Cod sursa (job #2889572) | Cod sursa (job #2668140) | Clasament xxxx_5 | Cod sursa (job #3245446)
#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;
}