Pagini recente » Cod sursa (job #2820550) | Cod sursa (job #541124) | Cod sursa (job #1818206) | Cod sursa (job #1785738) | Cod sursa (job #2858543)
#include <bits/stdc++.h>
#define nmax (2<<20)+5
using namespace std;
ifstream in("secv5.in");
ofstream out("secv5.out");
int m[nmax];
uint v[nmax];
int freq[nmax];
int tmp[nmax];
int n;
int64_t f(int lim)
{
memset(freq,0,sizeof freq);
int64_t res=0;
int elem=0;
int j=0;
for(int i=0;i<n;i++)
{
if(freq[m[i]]==0)
{
elem++;
}
freq[m[i]]++;
while(j<=i&&elem>lim)
{
freq[m[j]]--;
if(freq[m[j]]==0)
{
elem--;
}
j++;
}
res+=(i-j+1);
}
return res;
}
bool cmp(const int &a, const int &b)
{
return v[a]<v[b];
}
int main()
{
int l,u;
in>>n>>l>>u;
for(int i=0;i<n;i++)
{
in>>v[i];
tmp[i]=i;
}
sort(tmp,tmp+n,cmp);
for(int i=0;i<n;i++)
{
if(i>0&&v[tmp[i]]==v[tmp[i-1]])m[tmp[i]]=m[tmp[i-1]];
else m[tmp[i]]=i;
}
out<<f(u)-f(l-1);
}