Pagini recente » Cod sursa (job #3122531) | Cod sursa (job #1172341) | Cod sursa (job #1765113) | Cod sursa (job #8178) | Cod sursa (job #1067611)
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <list>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <algorithm>
#define INFL "secv5.in"
#define OUTFL "secv5.out"
using namespace std;
int n, l, u;
unsigned v[(1<<20)+1];
map<unsigned, int> H;
map<unsigned, int>::iterator it;
void read() {
scanf("%d%d%d", &n, &l, &u);
int x = 0;
for(int i=1; i<=n; ++i) {
scanf("%u", &v[i]);
it = H.find(v[i]);
if(it == H.end()) {
++x;
H[v[i]] = x;
v[i] = x;
//printf("%d\n", v[i]);
}
else {
v[i] = H[v[i]];
//printf("%d\n", v[i]);
}
}
H.clear();
}
unsigned f(int x) { //nr secv cu cel mult x elem dist
if(!x) return 0;
unsigned ans = 0;
int nr = 0, st = 1;
for(int i=1; i<=n; ++i) {
it = H.find(v[i]);
if(it == H.end()) {
H[v[i]] = 1;
++nr;
}
else ++H[v[i]];
while( nr > x ) {
--H[v[st]];
if(!H[v[st]]) {
H.erase(v[st]);
--nr;
}
++st;
}
//printf("%d %d %d\n", st, i, nr);
ans += (unsigned)(i-st+1);
}
H.clear();
return ans;
}
void solve() {
/*for (int i = 0; i < n; ++i)
{
printf("%d ", v[i+1]);
} printf("\n");*/
printf("%u", f(u) - f(l-1));
}
int main() {
//#define ONLINE_JUDGE 1
#ifndef ONLINE_JUDGE
freopen(INFL, "r", stdin);
freopen(OUTFL, "w", stdout);
#endif
read();
solve();
return 0;
}