Pagini recente » Cod sursa (job #81113) | Cod sursa (job #2761387) | Cod sursa (job #1348821) | Cod sursa (job #1759459) | Cod sursa (job #2730688)
#include <bits/stdc++.h>
using namespace std;
using int64 = long long;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
const int mod = 196613;
const int NMAX = 1 << 20 | 1;
int N, L, U, cnt;
unsigned a[NMAX];
vector<pair<unsigned,int>> Hash[mod];
void add(int x, int type) {
int key = x % mod;
for (auto &it : Hash[key])
if (it.first == x) {
it.second += type;
if (it.second == 0)
--cnt;
return;
}
++cnt;
Hash[key].emplace_back(x, 1);
}
void clear_hash() {
for (int key = 0; key < mod; ++key)
Hash[key].clear();
}
int64 solve(int K) { /// Cate secvente au maxim K elemente distincte?
if (K == 0)
return 0;
if (K == L - 1)
clear_hash();
int l = 1;
cnt = 0;
int64 ans = 0;
for (int r = 1; r <= N; ++r) {
add(a[r], 1);
while (cnt > K)
add(a[l++], -1);
ans += r - l + 1;
}
return ans;
}
void close_files() {
fin.close();
fout.close();
}
int main() {
fin >> N >> L >> U;
for (int i = 1; i <= N; ++i)
fin >> a[i];
fout << solve(U) - solve(L - 1) << '\n';
close_files();
return 0;
}