Pagini recente » Cod sursa (job #44334) | Cod sursa (job #577328) | Cod sursa (job #1410415) | Cod sursa (job #330284) | Cod sursa (job #1848903)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int NMAX=1100000,FMAX=4294967296;
unsigned int v[NMAX+5],f[FMAX+5];
unsigned int n,u,l,x,k=0,nr;
struct Pozitie {
unsigned int nr,poz;
}a[NMAX+5];
bool Comp(Pozitie a, Pozitie b) {
return a.nr<b.nr;}
long long Solve(unsigned int l) {
int length=0;
int st=1;
long long ans=0;
for(int dr=1;dr<=n;dr++) {
if(f[v[dr]]==0)
length++;
f[v[dr]]++;
while(length>l) {
f[v[st]]--;
if(f[v[st]]==0)
length--;
st++;}
ans+=1LL*(dr-st+1);}
return ans;}
int main() {
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
long long ans1=0,ans2=0,ans;
scanf("%d%d%d",&n,&u,&l);
for(unsigned int i=1;i<=n;i++) {
scanf("%d",&x);
a[i].nr=x;
a[i].poz=i;}
sort(a+1,a+1+n,Comp);
for(unsigned int i=1;i<=n;i++) {
if(a[i].nr!=a[i-1].nr )
k++;
v[a[i].poz]=k;}
ans1=Solve(l);
memset(f,0,sizeof(f));
ans2=Solve(u-1);
ans=ans1-ans2;
printf("%lld",ans);
return 0;}