Pagini recente » Cod sursa (job #1676726) | Cod sursa (job #1186493) | Cod sursa (job #1991307) | Cod sursa (job #571334) | Cod sursa (job #2594370)
#include <bits/stdc++.h>
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
int n,l,u,v[1024*1024+5],frecv[1024*1024+5],poz[1024*1024+5],aux[1024*1024+5],ind=0;
int z,fost,capat,nr;
long long sol=0;
int caut_bin(int x){
int st=1,dr=ind,mid;
while(st<=dr){
mid=(st+dr)/2;
if(poz[mid]<x) st=mid+1;
else if(poz[mid]>x) dr=mid-1;
else return mid;
}
}
int calc(int maxim){
int rasp=0;
for(int i=1;i<=ind;i++)
frecv[i]=0;
z=caut_bin(v[1]); frecv[z]++;
nr=1; fost=z;
for(int i=2;i<=n;i++){
z=caut_bin(v[i]);
if(frecv[z]==0&&nr==maxim){
capat=i-1;
break;
}
else{
if(frecv[z]==0) nr++;
frecv[z]++;
if(i==n) capat=n;
}
}
rasp+=capat;
for(int i=2;i<=n;i++){
frecv[fost]--;
if(frecv[fost]==0) nr--;
z=caut_bin(v[i]);
fost=z;
for(int j=capat+1;j<=n;j++){
z=caut_bin(v[j]);
if(frecv[z]==0&&nr==maxim){
capat=j-1;
break;
}
else{
if(frecv[z]==0) nr++;
frecv[z]++;
if(j==n) capat=n;
}
}
rasp+=capat-i+1;
}
return rasp;
}
int main()
{
f>>n>>l>>u;
for(int i=1;i<=n;i++){
f>>v[i];
aux[i]=v[i];
}
sort(aux+1,aux+n+1);
for(int i=1;i<=n;i++){
if(aux[i]!=aux[i-1]){
ind++;
poz[ind]=aux[i];
}
}
if(l>1)
g<<calc(u)-calc(l-1);
else
g<<calc(u);
}