Pagini recente » Cod sursa (job #2410072) | Cod sursa (job #981575) | Cod sursa (job #167551) | Istoria paginii home | Cod sursa (job #1856292)
#include<fstream>
#include<algorithm>
using namespace std;
const int NMAX = 1100000;
bool cmp(int *a, int *b){
if(*a < *b)
return 1;
return 0;
}
int n, l, u, v[NMAX], *poz[NMAX], hs1[NMAX], hs2[NMAX];
int main(){
ifstream fin("secv5.in");
ofstream fout("secv5.out");
fin >> n >> l >> u;
for(int i = 1; i <= n; i++){
fin >> v[i];
poz[i] = &v[i];
}
poz[n + 1] = &v[0];
sort(poz + 1, poz + n + 1, cmp);
int last = *poz[1], crnt = 1;
*poz[1] = crnt;
for(int i = 2; i <= n; i++){
if(*poz[i] != last){
crnt++;
last = *poz[i];
}
*poz[i] = crnt;
}
int st1, st2, dr, cnt1 = 0, cnt2 = 0; //st1 for l, st2 for u
long long qqq = 0;
for(st1 = 1, st2 = 1, dr = 1; dr <= n; dr++){
if(hs1[v[dr]]== 0){
cnt1++;
}
hs1[v[dr]]++;
while(cnt1 >= l){
if(hs1[v[st1]] == 1){
cnt1--;
}
hs1[v[st1]]--;
st1++;
}
if(hs2[v[dr]]== 0){
cnt2++;
}
hs2[v[dr]]++;
while(cnt2 > u){
if(hs2[v[st2]] == 1){
cnt2--;
}
hs2[v[st2]]--;
st2++;
}
if(cnt2 > l)
qqq += st1 - st2 + 1;
}
fout << qqq;
return 0;
}