Pagini recente » Cod sursa (job #2196548) | Cod sursa (job #1287947) | Cod sursa (job #580019) | Cod sursa (job #184864) | Cod sursa (job #1566328)
#include <fstream>
#include <iostream>
#include <unordered_map>
using namespace std;
unordered_map<int, int> H, L;
const int MAX_N = (1 << 20) + 10;
int lo[MAX_N],
hi[MAX_N];
bool okl[MAX_N],
okh[MAX_N];
int v[MAX_N];
int n;
int l, h;
void dec(unordered_map<int, int> & H, const int val) {
H[val]--;
if(H[val] == 0)
H.erase(val);
}
int main() {
ifstream in("secv5.in");
in >> n >> l >> h;
for(int i = 1; i <= n; ++i)
in >> v[i];
in.close();
int low = 1;
int high = 1;
for(int i = 1; i <= n; ++i) {
H[v[i]]++;
L[v[i]]++;
while((int)H.size() > h) {
dec(H, v[low++]);
}
hi[i] = low;
while((int)L.size() > l) {
dec(L, v[high++]);
}
while(L[v[high]] > 1) {
dec(L, v[high++]);
}
if((int)L.size() == l)
lo[i] = high;
else
lo[i] = -1;
}
long long sol = 0;
for(int i = 1; i <= n; ++i) {
if(lo[i] != -1)
sol += lo[i] - hi[i] + 1;
cout << hi[i] << " " << lo[i] << "\n";
}
ofstream out("secv5.out");
out << sol << "\n";
out.close();
return 0;
}