Pagini recente » Borderou de evaluare (job #2013291) | Clasament wintership | Cod sursa (job #2809509) | Cod sursa (job #1200645) | Cod sursa (job #791705)
Cod sursa(job #791705)
#include<stdio.h>
#include<vector>
#define maxn (1<<20)+5
#define MOD ((1<<19)-1)
#define pb push_back
#define mp make_pair
#define file_size 11000000
using namespace std;
FILE*f=fopen("secv5.in","r");
FILE*g=fopen("secv5.out","w");
int n,l,u,i,nrst,nrdr,ch;
unsigned int v[maxn];
long long sol;
vector< pair<unsigned int,int> >H[MOD+5];
char buff[file_size+5];
inline unsigned int next () {
unsigned int r = 0;
while ( buff[ch] >= '0' && buff[ch] <= '9' ){
r = r * 10 + buff[ch] - '0';
++ch;
}
++ch;
return r;
}
inline bool insert ( unsigned int val , int tip ){
int list = val & MOD; vector< pair<unsigned int,int> >::iterator itt;
for ( itt = H[list].begin() ; itt != H[list].end() ; ++itt ){
if ( itt->first == val ){
++itt->second;
return 0;
}
}
H[list].pb(mp(val,1)); return 1;
}
inline void erase ( unsigned int val ){
int list = val & MOD; vector< pair<unsigned int,int> >::iterator itt;
for ( itt = H[list].begin() ; itt != H[list].end() ; ++itt ){
if ( itt->first == val ){
--itt->second;
if ( !itt->second ){
*itt = H[list][H[list].size()-1]; H[list].pop_back(); --nrst;
}
return ;
}
}
}
inline void citire () {
fread(buff,file_size,1,f);
n = next(); l = next(); u = next();
for ( i = 1 ; i <= n ; ++i ){
v[i] = next();
}
}
inline long long solve ( int u ) {
int st = 1; nrst = 0; long long sol = 0;
for ( i = 1 ; i <= n ; ++i ){
nrst += insert(v[i],1);
while ( nrst > u ){
erase(v[st]); ++st;
}
sol += i - st;
}
return sol;
}
int main () {
citire();
long long sol1 = solve(l-1);
for ( int i = 0 ; i < MOD ; ++i ){
H[i].clear();
}
long long sol2 = solve(u);
fprintf(g,"%lld\n",sol2-sol1);
fclose(f);
fclose(g);
return 0;
}