Pagini recente » Cod sursa (job #2816569) | Cod sursa (job #2728372) | Cod sursa (job #2397956) | Cod sursa (job #1405061) | Cod sursa (job #2699998)
#include <fstream>
#include <unordered_map>
using namespace std;
const int N = 1 << 20;
int v[N], dl[N], du[N];
unordered_map<int, int> m;
int main() {
ifstream in("secv5.in");
ofstream out("secv5.out");
int n, l, u;
in >> n >> l >> u;
for (int i = 0; i < n; ++i)
in >> v[i];
in.close();
int j = 0, dif = 0;
for (int i = 0; i < n; ++i) {
++m[v[i]];
if (m[v[i]] == 1)
++dif;
while (j <= i && dif >= l) {
if (!(--m[v[j]]))
--dif;
++j;
}
if (dif == l - 1)
dl[i] = j;
else
dl[i] = -1;
}
j = dif = 0;
m.clear();
for (int i = 0; i < n; ++i) {
++m[v[i]];
if (m[v[i]] == 1)
++dif;
while (j <= i && dif > u) {
if (!(--m[v[j]]))
--dif;
++j;
}
du[i] = j;
}
long long rez = 0;
for (int i = 0; i < n; ++i)
if (dl[i] != -1)
rez += dl[i] - du[i];
out << rez;
out.close();
return 0;
}