0

giải K-dominant Subarray

đã đăng vào 3, Tháng 1, 2026, 18:06

include <bits/stdc++.h>

using namespace std;

int main(){ ios::syncwithstdio(false); cin.tie(nullptr);

int N, K;
cin >> N >> K;
vector<long long> a(N);
for(int i = 0; i < N; i++) cin >> a[i];

unordered_map<long long, vector<int>> pos;
pos.reserve(N * 2);

for(int i = 0; i < N; i++)
    pos[a[i]].push_back(i + 1);

long long ans = 0;

for(auto &p : pos){
    auto &v = p.second;
    int t = v.size();
    if(t < K) continue;

    for(int i = 0; i + K - 1 < t; i++){
        for(int j = i + K - 1; j < t; j++){
            int c = j - i + 1;
            int maxLen = 2 * c - 1;

            int Lmin = v[j] - maxLen + 1;
            int Lmax = v[i];

            int Rmin = v[j];
            int Rmax = v[i] + maxLen - 1;

            Lmin = max(Lmin, 1);
            Lmax = min(Lmax, v[i]);

            Rmin = max(Rmin, v[j]);
            Rmax = min(Rmax, N);

            if(Lmin > Lmax || Rmin > Rmax) continue;

            long long total = 1LL * (Lmax - Lmin + 1) * (Rmax - Rmin + 1);
            ans += total;
        }
    }
}

cout << ans;

}


Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.