Pagini recente » Cod sursa (job #2569646) | Cod sursa (job #2743320) | Cod sursa (job #571445) | Cod sursa (job #2228539) | Cod sursa (job #2209941)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
unsigned int v[1048580],i,j,n,u,l,k,w,nrs,nrdif;
int f1[(1<<20)+2],f2[(1<<20)+2];
struct element
{
unsigned int val,poz;
}a[1048580];
bool cmp (element a, element b)
{
if(a.val<b.val)
{
return true;
}
else
{
return false;
}
}
int main()
{
fin>>n>>l>>u;
for(i=1;i<=n;i++)
{
fin>>v[i];
a[i].val=v[i];
a[i].poz=i;
}
sort(a+1,a+n+1,cmp);
k=0;
w=0;
for(i=1;i<=n;i++)
{
if(w<a[i].val)
{
k++;
w=a[i].val;
v[a[i].poz]=k;
}
else
{
v[a[i].poz]=k;
}
}
nrs=0;
nrdif=0;
i=1;
j=0;
k=0;
while(i<=n && nrdif<l)
{
if(f1[v[i]]==0)
{
nrs=nrs+2;
}
nrdif++;
f1[v[i]]++;
f2[v[i]]++;
i++;
}
if(i<n)
{
nrdif--;
}
while(j<=n && nrdif<=u)
{
if(f1[v[j]]==0)
{
nrs=nrs+2;
}
nrdif++;
f1[v[j]]++;
f2[v[j]]++;
j++;
}
if(j<n)
{
nrdif--;
}
while(k<=n && nrdif<=u)
{
if(f2[v[k]]==0)
{
nrs=nrs+(k-n+1);
}
f2[v[k]]++;
k++;
nrdif++;
}
if(k<n)
{
nrdif--;
}
/**for(i=1;i+l-1<=n;i++)
{
memset(f,0,((1<<20)+2)*sizeof(int));
nrdif=0;
for(j=i;j<=n && nrdif<=u;j++)
{
if(f[v[j]]==0)
{
nrdif++;
f[v[j]]=1;
}
if(nrdif>=l && nrdif<=u)
{
nrs++;
}
}
}*/
fout<<nrs;
fin.close();
fout.close();
return 0;
}