Pagini recente » Cod sursa (job #2395008) | Cod sursa (job #2595951) | Cod sursa (job #139366) | Cod sursa (job #1319306) | Cod sursa (job #1303167)
#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 st,dr,ST,DR;
int n,l,u,i;
long long R,r;
unsigned int v[1<<21];
list <pair<unsigned int,int> > H[2][md];
int cn[2];
unsigned int inline heap_key(unsigned int val)
{
return ( (unsigned int)val%md);
}
void insert_heap(int ind,unsigned int val)
{
int key = heap_key(val);
list<pair<unsigned 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,unsigned int val)
{
int key = heap_key(val);
list<pair<unsigned 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,"%ud",&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 =ll R-r;
fprintf(g,"%lld",R);
return 0;
}