Pagini recente » Arhiva de probleme | Cod sursa (job #2293417) | Cod sursa (job #615058) | Cod sursa (job #171870) | Cod sursa (job #1566314)
#include <fstream>
#include <iostream>
#include <unordered_map>
using namespace std;
unordered_map<int, int> H;
const int MAX_N = (1 << 20) + 10;
int lo[MAX_N],
hi[MAX_N];
int v[MAX_N];
int n;
int l, h;
void process(int l, int * p) {
H.clear();
int lo = 1;
for(int i = 1; i <= n; ++i) {
if(!H.count(v[i]))
H[v[i]] = 1;
else
H[v[i]]++;
while((int)H.size() > l) {
H[v[lo]]--;
if(H[v[lo]] == 0)
H.erase(v[lo]);
lo++;
}
if((int)H.size() == l)
p[i] = lo;
else
p[i] = 0;
}
}
int main() {
ifstream in("secv5.in");
in >> n >> l >> h;
for(int i = 1; i <= n; ++i)
in >> v[i];
in.close();
process(l, lo);
process(h, hi);
long long sol = 0;
for(int i = 1; i <= n; ++i) {
if(lo[i])
sol += lo[i] - hi[i] + 1;
}
ofstream out("secv5.out");
out << sol << "\n";
out.close();
return 0;
}