Pagini recente » Cod sursa (job #3141944) | Cod sursa (job #2445330) | Cod sursa (job #530005) | Cod sursa (job #141842) | Cod sursa (job #1303153)
#include <cstdio>
#include <algorithm>
#include <list>
#define md 666013
#define mp make_pair
#define X first
#define C second
#define ll (long long)
using namespace std;
FILE *f,*g;
int v[1<<21];
int st,dr,ST,DR;
int n,l,u,i;
long long R,r;
list <pair<int,int> > H[2][md];
int cn[2];
int inline heap_key(int val)
{
return (val%md);
}
void insert_heap(int ind,int val)
{
int key = heap_key(val);
list<pair<int,int> >::iterator it;
for (it = H[ind][key].begin(); it!=H[ind][key].end();it++)
if ( (*it).X == val)
{
(*it).C++;
return ;
}
H[ind][key].push_back(mp(val,1));
cn[ind]++;
}
void erase_heap(int ind,int val)
{
int key = heap_key(val);
list<pair<int,int> >::iterator it;
for (it = H[ind][key].begin();it!=H[ind][key].end();it++)
if ( (*it).X == val)
{
(*it).C--;
if ((*it).C == 0)
{
H[ind][key].erase(it);
cn[ind]--;
}
return ;
}
}
int main()
{
f=fopen("secv5.in","r");
g=fopen("secv5.out","w");
fscanf(f,"%d%d%d",&n,&l,&u);
l--;
for (i=1,st=ST=1;i<=n;i++)
{
fscanf(f,"%d",&v[i]);
insert_heap(0,v[i]);
insert_heap(1,v[i]);
while (cn[0]>l) erase_heap(0,v[st++]);
while (cn[1]>u) erase_heap(1,v[ST++]);
r = ll r + ll i-st+1;
R = ll R + ll i-ST+1;
}
R = R-r;
fprintf(g,"%lld",R);
return 0;
}