Pagini recente » Cod sursa (job #1119578) | Cod sursa (job #632269) | Cod sursa (job #329855) | Cod sursa (job #743601) | Cod sursa (job #912203)
Cod sursa(job #912203)
#include <fstream>
#include <cstring>
#include <vector>
#define f first
#define s second
#define MOD 666013
#define N 1050000
#define mp make_pair
#define pb push_back
using namespace std;
vector<pair<int, int> > H[MOD+10];
unsigned int sol, stk, L, i, j, aux[N], A[N], a[N], x, n, p, l, u;
bool ok;
void get_Hash(int lim)
{
stk = 1; L = 0;
for(i = 0; i < MOD; i++) H[i].clear();
for(j = 1; j <= n; j++)
{
x = a[j];
p = x % MOD;
for(i = 0, ok = 1; i < H[p].size(); i++)
if(H[p][i].f == x)
{
if(!H[p][i].s) L++;
H[p][i].s++;
ok = 0;
break;
}
if(ok)
{
H[p].pb(mp(x, 1));
L++;
}
while(L > lim)
{
x = a[stk];
p = x % MOD;
for(i = 0; i < H[p].size(); i++)
if(H[p][i].f == x)
{
H[p][i].s--;
if(!H[p][i].s) L--;
break;
}
stk++;
}
aux[j] = stk;
}
}
int main()
{
ifstream fi("secv5.in");
ofstream fo("secv5.out");
fi >> n >> l >> u;
for(i = 1; i <= n; i++) fi >> a[i];
get_Hash(u);
memcpy(A, aux, sizeof(aux));
get_Hash(l-1);
for(i = 1; i <= n; i++) sol += aux[i] - A[i];
fo << sol << "\n";
return 0;
}