Pagini recente » Cod sursa (job #2683154) | Cod sursa (job #2423991) | Cod sursa (job #1090921) | Cod sursa (job #1012730) | Cod sursa (job #1136168)
#include<stdio.h>
#include<algorithm>
#define N 1048576
unsigned int v[N],orig[N],ap[N],n;
int cautbin(unsigned int st,unsigned int dr,unsigned int val)
{
unsigned int mij=(st+dr)/2;
while(st<=dr)
{
mij=(st+dr)/2;
if(orig[mij]==val)
return mij;
else
if(orig[mij]<val)
st=mij+1;
else
dr=mij-1;
}
return 0;
}
long long getsecv(unsigned int val) {
long long secv=0;
unsigned int i;
for(i=0;i<N;i++)
ap[i]=0;
unsigned int j,nr=0;
i=0;
for(j=0;j<n;j++)
{
if(ap[v[j]]==0)
nr++;
ap[v[j]]++;
while(nr>val)
{
ap[v[i]]--;
if(ap[v[i]]==0)
nr--;
i++;
}
secv+=j-i+1;
}
return secv;
}
int main()
{
FILE *fin,*fout;
fin=fopen("secv5.in","r");
fout=fopen("secv5.out","w");
unsigned int l,u;
fscanf(fin,"%d%d%d",&n,&l,&u);
unsigned int i;
for(i=0; i<n; i++)
{
fscanf(fin,"%u",&v[i]);
orig[i]=v[i];
}
i=0;
unsigned int poz=0;
std::sort(orig,orig+n);
while(i<n)
{
while(orig[poz]==orig[i]&&i<n)
i++;
if(i<n)
orig[++poz]=orig[i];
i++;
}
for(i=0;i<n;i++)
v[i]=cautbin(0,poz,v[i]);
fprintf(fout,"%lld",getsecv(u)-getsecv(l-1));
return 0;
}