Pagini recente » Cod sursa (job #3257831) | Cod sursa (job #2318460) | Cod sursa (job #1476919) | Cod sursa (job #1587985) | Cod sursa (job #2884397)
#include <iostream>
#include <bits/stdc++.h>
#include <fstream>
#include <map>
using namespace std;
ifstream in("secv5.in");
ofstream out("secv5.out");
const static long mod = 66013;
vector<vector<int>> v;
int dim=0;
int search(int value) {
int key = value % mod;
for (int i = 0; i < v[key].size(); ++i)
if (v[key][i] == value)
return i;
return -1;
}
void insert(int value) {
if(search(value) == -1) dim++;
v[value % mod].push_back(value);
}
void erase(int value) {
int key = value % mod;
int s = v[key].size() - 1;
int ind = search(value);
if (ind != -1) {
// v[key][ind] = v[key][s];
v[key].pop_back();
}
if(search(value) == -1) dim--;
}
int main() {
v.resize(mod);
vector<int> v1;
int l, u, n;
int x;
in >> n;
in >> l >> u;
for (int i = 0; i < n; i++) {
in >> x;
v1.push_back(x);
}
int s = 0, cntU = 0, cntL = 0;
for (int i = 0; i < n; i++) {
insert(v1[i]);
while (dim > u) {
erase(v1[s++]);
}
cntU += (i - s + 1);
}
s = 0;
v.clear();
v.resize(mod);
dim = 0 ;
for (int i = 0; i < n; i++) {
insert(v1[i]);
while (dim >= l)
erase(v1[s++]);
cntL += (i - s + 1);
}
out << cntU - cntL;
return 0;
}