Pagini recente » Photo | Cod sursa (job #1873120) | Cod sursa (job #684145) | Cod sursa (job #1748136) | Cod sursa (job #1775015)
#include <iostream>
#include <fstream>
#include <vector>
#define MOD 666013
#define db 0
#define DB 0
#define NMAX (1<<20) + 3
using namespace std;
unsigned int l, u, n, v[NMAX];
vector <unsigned int> h[MOD + 1], count[MOD + 1];
void add (unsigned int x, unsigned int val)
{
if (db)
{
cout << "am adaugat " << x << endl;
}
unsigned int r = x % MOD;
for (unsigned int i = 0; i < h[r].size(); i++)
{
if (h[r][i] == x)
{
count[r][i] += val;
return;
}
}
h[r].push_back(x);
count[r].push_back(1);
}
unsigned int f (unsigned int x)
{
unsigned int r = x % MOD;
for (unsigned int i = 0; i < h[r].size(); i++)
{
if (h[r][i] == x)
return count[r][i];
}
return 0;
}
long long solve (unsigned int k)
{
if (db)
cout << "here" << endl;
unsigned int inter = 0, i1 = 1;
long long sol = 0;
for (unsigned int i = 1; i <= n; i++)
{
if (f(v[i]) == 0)
inter++;
if (DB)
cout << inter << " "<< v[i] <<endl;
add (v[i], 1);
while (inter > k)
{
if(db == 1)
cout << "here" << endl;
add (v[i1], -1);
if (f(v[i1]) == 0)
inter--;
i1++;
}
if (db)
cout << "WTF" << endl;
sol += (long long)(i - i1 + 1);
}
for (unsigned int i = 0; i <= MOD; i++)
{
h[i].clear();
count[i].clear();
}
return sol;
}
int main()
{
ifstream cin ("secv5.in");
ofstream cout ("secv5.out");
cin >> n >> l >> u;
for (unsigned int i = 1; i <= n; i++)
cin >> v[i];
cout << solve(u) - solve(l - 1);
return 0;
}