Pagini recente » Cod sursa (job #2708540) | Cod sursa (job #1841136) | Cod sursa (job #2042397) | Cod sursa (job #2767422) | Cod sursa (job #1483494)
#include <cstdio>
#include <vector>
using namespace std;
const char iname[] = "secv5.in";
const char oname[] = "secv5.out";
const int MAXN = 1 << 20;
const int MOD = 246913;
vector<unsigned int> H1[MOD], H2[MOD];
unsigned int a[MAXN], l, u, n;
void read(){
freopen(iname, "r", stdin);
scanf("%u %u %u", &n, &l, &u);
for(int i = 0; i < n; ++i)
scanf("%u", a+i);
}
long long nrSecv(int lim, vector<unsigned int> H[MOD]){
long long secv = 0;
int inc = 0, nrElem = 0;
for(int i = 0; i < n; ++i){
int hPos = a[i]%MOD;
if(H[hPos].size() == 0) H[hPos].push_back(a[i]), ++nrElem;
else{
int ok = 1;
for(int j = 0; j < H[hPos].size(); ++j)
if(a[i] == H[hPos][j]){
ok = 0;
break;
}
H[hPos].push_back(a[i]);
if(ok) ++nrElem;
}
hPos = a[inc]%MOD;
while(nrElem > lim){
int ok = 1;
for(unsigned int i = 0; i < H[hPos].size(); ++i)
if(H[hPos][i] == a[inc])
{
H[hPos][i] = H[hPos][H[hPos].size()-1];
H[hPos].pop_back();
++inc;
--i;
ok = 0;
}
if(ok)
--nrElem;
}
secv += i - inc;
}
return secv;
}
int main()
{
read();
long long sec1, sec2;
sec1 = nrSecv(u, H1);
sec2 = nrSecv(l-1, H2);
freopen(oname, "w", stdout);
printf("%lld", (sec1 - sec2));
return 0;
}