Pagini recente » Cod sursa (job #1211177) | Cod sursa (job #424037) | Cod sursa (job #2377007) | Cod sursa (job #151850) | Cod sursa (job #2473482)
#include <bits/stdc++.h>
#define NMAX 2097152
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
const unsigned int p = 666013;
unsigned int n, l, u, v[NMAX + 5];
vector <pair <int, int> > h[p + 5];
void Adauga(unsigned int x, unsigned int &k)
{
int ha = x % p;
for (int i = 0; i < h[ha].size(); ++i)
{
if (h[ha][i].first == x)
{
h[ha][i].second++;
return;
}
}
h[ha].push_back({x, 1});
++k;
}
void Sterge(unsigned int x, unsigned int &k)
{
int ha = x % p;
for (int i = 0; i < h[ha].size(); ++i)
{
if (h[ha][i].first == x)
{
h[ha][i].second--;
if (h[ha][i].second == 0)
{
--k;
swap(h[ha][i], h[ha][h[ha].size()]);
h[ha].pop_back();
return;
}
}
}
}
int f(int x)
{
for (int i = 0; i < p; ++i)
h[i].clear();
if (x == 0)
return 0;
unsigned int contor = 0;
int st = 1;
int ans = 0;
for (int i = 1; i <= n; ++i)
{
Adauga(v[i], contor);
while (contor > x)
{
Sterge(v[st], contor);
++st;
}
ans = ans + i - st + 1;
}
return ans;
}
int main()
{
fin >> n >> l >> u;
for (int i = 1; i <= n; ++i)
{
fin >> v[i];
}
fout << f(u) - f(l - 1) << "\n";
fin.close();
fout.close();
return 0;
}