Pagini recente » Cod sursa (job #38876) | Cod sursa (job #1998238) | Cod sursa (job #1576492) | Cod sursa (job #2103291) | Cod sursa (job #2858487)
#include <bits/stdc++.h>
#define nmax (1<<20)+5
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
int n,l,u,v[nmax],fr[nmax];
int s[nmax],nor[nmax];
int el;
void mod(int nr, bool rem=0)
{
if(rem)
{
fr[nr]--;
el-=(fr[nr]==0);
return;
}
el+=(fr[nr]==0);
fr[nr]++;
}
bool cmp(const int &a, const int &b)
{
return v[a]<v[b];
}
int main()
{
f>>n>>l>>u;
for(int i=0;i<n;i++)
{
f>>v[i];
s[i]=i;
}
sort(s,s+n,cmp);
for(int i=0;i<n;i++)
{
//g<<s[i]<<','<<v[s[i]]<<' ';
if(i>0&&v[s[i]]==v[s[i-1]])
nor[s[i]]=nor[s[i-1]];
else
nor[s[i]]=i;
}
int ans=0;
int j=0;
//add big
for(int i=0;i<n;i++)
{
mod(nor[i]);
while(j<=i&&el>u)
{
mod(nor[j],1);
j++;
}
ans+=(i-j+1);
}
//rebound
while(j<n)
{
mod(nor[j],1);
j++;
}
j=0;
//remove smol
for(int i=0;i<n;i++)
{
mod(nor[i]);
while(j<=i&&el>=l)
{
mod(nor[j],1);
j++;
}
ans-=(i-j+1);
}
g<<ans;
}