// compile: g++ -o data data.cpp -std=gnu++20 -DLOCAL
// run: ./data < data.in
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#ifdef LOCAL
#endif
#define PV(v) for (int i=0;i<v.size();++i)cout<<v[i]<<" ";cout<<endl;
#define int long long
#define MAXN 200010
using namespace std;
int n, k, a[MAXN];
vector<int> odd[MAXN];
vector<int> even[MAXN];
vector<pair<int, int>> v;
int total(vector<int> &h, int p) {
// >p
// <p+k
int rad = k / 2;
int cL = max(p, 2*rad - p - 2), cR = min(p + k, 2 * (n-rad) - p);
int l = 0, r = (int)(h.size()) - 1;
int L = -1, R = -1;
while (l <= r) {
int mid = l + (r - l) / 2;
if (h[mid] <= cL) l = mid + 1;
else {
L = mid;
r = mid - 1;
}
}
l = 0, r = (int)(h.size()) - 1;
while (l <= r) {
int mid = l + (r - l) / 2;
if (h[mid] >= cR) r = mid - 1;
else {
R = mid;
l = mid + 1;
}
}
// cout << "#" << p << endl;
if (!~L || !~R || L > R) return 0;
// for (int i = L; i <= R; ++i) cout << h[i] << " "; cout << endl;
// for (int i = L; i <= R; ++i) v.push_back(make_pair(p, h[i]));
return R - L + 1;
}
int32_t main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> n >> k;
for (int i = 0; i < n; ++i) {
cin >> a[i];
if (i & 1) odd[a[i]].push_back(i);
else even[a[i]].push_back(i);
}
int cnt = 0;
for (int i = 0; i < n; ++i) {
cnt += total((i & 1) ? odd[a[i]] : even[a[i]], i);
}
// for (int i = 0; i < v.size(); ++i) {
// cout << v[i].first << " " << v[i].second << endl;
// }
// cout << cnt << endl;
cout << (n-k+1) * (k/2) - cnt << endl;
// cout << (n-k+1) * (k/2) << endl;
return 0;
}
No Comments