Pagini recente » Cod sursa (job #1166062) | Cod sursa (job #2164982) | Cod sursa (job #2957399) | Cod sursa (job #3205986) | Cod sursa (job #2594388)
#include <bits/stdc++.h>
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
#define N ((1 << 20) + 5)
int n,l,u,frecv[N],ind=0;
unsigned int v[N],aux[N],poz[N];
int z,fost,capat,nr;
long long sol=0;
int caut_bin(unsigned 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;
}
}
long long calc(int maxim){
long long 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);
}