1 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int maxn = 2e5 + 5; int tr[maxn<<2], n, q; #define lson l, mid, rt<<1 #define rson mid+1, r, rt<<1|1 void push_up(int rt) { tr[rt] = tr[rt<<1] + tr[rt<<1|1]; } void update(int p, int l, int r, int rt) { if (l == r) { tr[rt] = 1; return; } int mid = (l + r) / 2; (p <= mid) ? update(p, lson) : update(p, rson); push_up(rt); } int query(int L, int R, int l, int r, int rt) { if (L <= l && r <= R) return tr[rt]; int mid = (l + r) / 2, res = 0; if (L <= mid) res += query(L, R, lson); if (R > mid) res += query(L, R, rson); return res; } int find(int L, int R, int k, int l, int r, int rt) { if (l == r) return l; int mid = (l + r) / 2; if (L <= mid) { // [l , mid] int m = query(L, R, lson); if (m >= k) return find(L, R, k, lson); return find(L, R, k-m, rson); } return find(L, R, k, rson); } int main() { scanf("%d%d", &n, &q); while (q--) { int op; scanf("%d", &op); if (op == 1) { int x; scanf("%d", &x); update(x, 1, n, 1); } else { int l, r, k; scanf("%d%d%d", &l, &r, &k); printf("%d\n", find(l, r, k, 1, n, 1)); } } return 0; }
- 1
信息
- ID
- 29
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 6
- 已通过
- 2
- 上传者