Pagini recente » Cod sursa (job #124658) | Cod sursa (job #3261553) | Cod sursa (job #48293) | Cod sursa (job #1740696) | Cod sursa (job #2047518)
#include <bits/stdc++.h>
#define nmax (1<<20)+1
using namespace std;
ifstream in("secv5.in");
ofstream out("secv5.out");
pair <unsigned, int> v[nmax];
int v2[nmax];
int f[nmax];
bool cmp (pair<unsigned,int> a, pair<unsigned,int> b){
return a.first<b.first;
}
int main(){
long long rez, n, l, u, i, nr, val, st, eldif;
in >> n >> l >> u;
for (i=1; i<=n; i++){
in >> nr;
v[i]={(unsigned)nr, (int)i};
}
sort (v+1, v+n+1, cmp);
val=0;
for (i=1; i<=n; i++){
if (v[i].first!=v[i-1].first)
val++;
v2[v[i].second]=val;
}
// for (i=1; i<=n; i++)
// cout << v2[i] <<' ';
{//Lungime u
eldif=0;
i=1;
while (eldif<u && i<=n){
if (f[v2[i]]==0)
eldif++;
f[v2[i]]++;
i++;
}
f[v2[--i]]--;
eldif--;
st=1;
rez=i*(i-1)/2;
for (; i<=n; i++){
if (f[v2[i]]==0)
eldif++;
f[v2[i]]++;
while (eldif>u){
st--;
do{
st++;
f[v2[st]]--;
}while(f[v2[st]]!=0);
st++;
eldif--;
}
rez+=i-st+1;
}
}
memset(f, 0, sizeof(f));
{//Lungime l-1
eldif=0;
i=1;
while (eldif<l-1 && i<=n){
if (f[v2[i]]==0)
eldif++;
f[v2[i]]++;
i++;
}
f[v2[--i]]--;
eldif--;
st=1;
rez-=i*(i-1)/2;
for (; i<=n; i++){
if (f[v2[i]]==0)
eldif++;
f[v2[i]]++;
while (eldif>l-1){
st--;
do{
st++;
f[v2[st]]--;
}while(f[v2[st]]!=0);
st++;
eldif--;
}
rez-=i-st+1;
}
}
out << rez;
}