Pagini recente » Cod sursa (job #1210889) | Cod sursa (job #1079958) | Cod sursa (job #2292486) | Cod sursa (job #3033164) | Cod sursa (job #1774988)
#include <iostream>
#include <fstream>
#include <vector>
#define MOD 666013
#define db 0
#define DB 0
#define NMAX (1<<20) + 3
using namespace std;
int l, u, n, v[NMAX];
vector <int> h[MOD + 1], count[MOD + 1];
void add (int x, int val)
{
if (db)
{
cout << "am adaugat " << x << endl;
}
int r = x % MOD;
for (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);
}
int f (int x)
{
int r = x % MOD;
for (int i = 0; i < h[r].size(); i++)
{
if (h[r][i] == x)
return count[r][i];
}
return 0;
}
int solve (int k)
{
if (db)
cout << "here" << endl;
int inter = 0, i1 = 1, sol = 0;
for (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 += i - i1;
}
for (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 (int i = 1; i <= n; i++)
cin >> v[i];
cout << solve(u) - solve(l - 1);
return 0;
}