Cod sursa(job #3283960)
| Utilizator | Data | 10 martie 2025 19:13:07 | |
|---|---|---|---|
| Problema | Secventa 5 | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Teme Pregatire ACM Unibuc 2014, Anul I | Marime | 1.17 kb |
#include <fstream>
#include <map>
using namespace std;
ifstream cin("secv5.in");
ofstream cout("secv5.out");
map<int, int> M;
long long int n, x, y, v[2000005], dr = 0, st = 1, cnt1 = 0, cnt2 = 0, r = 0;
int main(){
cin>>n>>x>>y;
for (int i = 1; i <= n; i++){
cin>>v[i];
}
while (dr != n){
dr++;
M[v[dr]]++;
if (M[v[dr]] == 1){
r++;
if (r <= y){
cnt1 += dr - st + 1;
}
while (r > y){
M[v[st]]--;
if (M[v[st]] == 0){
r--;
}
st++;
}
}
}
r = 0;
st = 1;
dr = 0;
for (auto &i:M){
M.erase(i.first);
}
while (dr != n){
dr++;
M[v[dr]]++;
if (M[v[dr]] == 1){
r++;
if (r <= x - 1){
cnt2 += dr - st + 1;
}
while (r > x - 1){
M[v[st]]--;
if (M[v[st]] == 0){
r--;
}
st++;
}
}
}
cout<<cnt1 - cnt2;
}
