Pagini recente » Cod sursa (job #2461248) | Cod sursa (job #2210111) | Cod sursa (job #3121112) | Cod sursa (job #3218476) | Cod sursa (job #682815)
Cod sursa(job #682815)
#include<cstdio>
#include<queue>
#include<vector>
#define MOD 30773
using namespace std;
queue <unsigned> H[MOD];
vector <unsigned> v;
int n, l, u, nr;
long long Subs(int N){ //nr de subs cu maxim N nr distincte
int i, j; long long nSub;
for(i = j = nSub = 0; i < n; i++){
if(H[v[i] % MOD].empty()) nr++;
H[v[i] % MOD].push(v[i]);
while(nr > N){
H[v[j] % MOD].pop();
if (H[v[j++] % MOD].empty()) nr--;
}
nSub += i - j + 1;
}
while(j < n) H[v[j++] % MOD].pop(); //curat hashul
nr = 0;
return nSub;
}
int main(){
freopen("secv5.in", "r", stdin), freopen("secv5.out", "w", stdout);
scanf("%d %d %d", &n, &l, &u);
int i; unsigned x;
for(i = 0; i < n; i++)
scanf("%u", &x), v.push_back(x);
printf("%lld\n", Subs(u) - Subs(l-1));
return 0;
}