Pagini recente » Cod sursa (job #445637) | Cod sursa (job #2529639) | Cod sursa (job #2105303) | Cod sursa (job #2630314) | Cod sursa (job #1609049)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
vector <int> aux;
//15:26
const int NMAX = (1 << 20) + 5;
int n;
int v[NMAX];
int frecv[NMAX];
long long int det_ans(int bound) {
if (!bound)
return 0;
long long int ans = 0;
int st = 1;
int dist = 1;
for (int i = 1; i <= n; ++ i) {
++ frecv[v[i]];
if (frecv[v[i]] == 1)
++ dist;
while (dist > bound && st <= i) {
frecv[v[st]] --;
if (!frecv[v[st ++]])
-- dist;
}
ans += (i - st + 1);
}
memset(frecv, 0, sizeof frecv);
return ans;
}
int main()
{
ifstream cin("secv5.in");
ofstream cout("secv5.out");
int l, u;
cin >> n >> l >> u;
for (int i = 1; i <= n; ++ i) {
cin >> v[i];
aux.push_back(v[i]);
}
sort(aux.begin(), aux.end());
aux.resize(unique(aux.begin(), aux.end()) - aux.begin());
for (int i = 1; i <= n; ++ i)
v[i] = lower_bound(aux.begin(), aux.end(), v[i]) - aux.begin() + 1;
cout << det_ans(u) - det_ans(l - 1) << '\n';
cin.close();
cout.close();
return 0;
}