提交时间:2024-01-23 09:54:22
运行 ID: 123808
#include <bits/stdc++.h> #define ls (cur<<1) #define rs (ls|1) #define mid (l+r>>1) #define int long long using namespace std; int n, k, p, a[200005], b[200005], tr[200005<<2], s[105][200005], ans; void push_up(int cur) { tr[cur] = min(tr[ls], tr[rs]); } void build(int cur, int l, int r) { if (l == r) { tr[cur] = b[l]; return; } build(ls, l, mid); build(rs, mid+1, r); push_up(cur); } int query(int cur, int l, int r, int x, int y) { if (x <= l && r <= y) { return tr[cur]; } int ans = INT_MAX; if (x <= mid) ans = min(ans, query(ls, l, mid, x, y)); if (y > mid) ans = min(ans, query(rs, mid+1, r, x, y)); return ans; } signed main() { scanf("%lld%lld%lld", &n, &k, &p); for (int i=1; i<=n; i++) { int x, y; scanf("%lld%lld", &x, &y); a[i] = x, b[i] = y; for (int j=0; j<k; j++) { s[j][i] = s[j][i-1]; } s[x][i]++; } build(1, 1, n); for (int col=0; col<k; col++) { for (int i=1; i<=n; i++) { if (a[i] != col) continue; for (int j=i+1; j<=n; j++) { if (a[j] != col) continue; if (query(1, 1, n, i, j) <= p) { ans += s[col][n]-s[col][j-1]; break; } } } } printf("%lld", ans); return 0; }