Pagini recente » Cod sursa (job #802726) | Cod sursa (job #203274) | Cod sursa (job #349021) | Cod sursa (job #690173) | Cod sursa (job #2890282)
#include<bits/stdc++.h>
using namespace std;
int n, L, U;
unsigned int v[(1<<20)+1];
unsigned int arr[(1<<20)+1];
int id[(1<<20)+1], ap[(1<<20)+1];
ifstream f("secv5.in");
ofstream g("secv5.out");
long long secv(int k){
for(int i=0;i<n;i++){
ap[i]=0;
}
long long max_nr_allowed=0, left=0, cnt=0;
for(int i=0;i<n;i++){
if(!ap[arr[i]]){
max_nr_allowed++;
}
ap[arr[i]]++;
while(max_nr_allowed>k){
ap[arr[left]]--;
if(ap[arr[left]]==0)max_nr_allowed--;
left++;
}
cnt+=i-left+1;
}
return cnt;
}
bool cmp(int x, int y){
return v[x]<v[y];
}
int main(){
f>>n>>L>>U;
for(int i=0;i<n;i++){
f>>v[i];
id[i]=i;
}
sort(id,id+n,cmp);
arr[id[0]]=id[0];
for(int i=1;i<n;i++){
if(v[id[i]]==v[id[i-1]]){
arr[id[i]]=arr[id[i-1]];
}else{
arr[id[i]]=i;
}
}
// for(int i=0;i<n;i++)
// cout<<arr[i]<<" ";
// cout<<"\n";
g<<secv(U)-secv(L-1);
return 0;
}