Pagini recente » Cod sursa (job #545753) | Cod sursa (job #1602626) | Cod sursa (job #1124201) | Cod sursa (job #1789480) | Cod sursa (job #911335)
Cod sursa(job #911335)
#include <fstream>
#include <map>
using namespace std;
ifstream cin("secv5.in");
ofstream cout("secv5.out");
map<unsigned int,int> h;
int N, L, U;
int K;
int a[1<<20], c[2][1<<20];
inline int getIndex(const unsigned int &val) {
if(h[val] != 0) {
return h[val];
}
return h[val] = ++K;
}
int main()
{
cin>>N>>L>>U;
unsigned int val;
for(int i = 0;i < N;i++) {
cin>>val;
a[i] = getIndex(val);
}
int l, u;
int nl, nu;
nl = nu = 0;
l = u = 0;
long long ans = 0;
for(int i = 0;i < N;i++) {
while(l < N && nl < L) {
nl += ((c[0][a[l++]]++) == 0);
}
while(u < N && nu + ( c[1][a[u]] == 0) <= U) {
nu += ( (c[1][a[u++]]++) == 0);
}
if(nl >= L) {
ans += (u - l + 1);
}
nl -= ((--c[0][a[i]]) == 0);
nu -= ((--c[1][a[i]]) == 0);
}
cout<<ans;
return 0;
}