社区讨论
树状数组求条
P1533可怜的狗狗参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mlozcpjq
- 此快照首次捕获于
- 2026/02/16 17:36 3 天前
- 此快照最后确认于
- 2026/02/16 23:58 3 天前
CPP
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long ll;
const int MAXN = 3e5 + 5;
int n, m;
int a[MAXN];
struct FenwickTree{
int c[MAXN];
int lowbit(int x) {
return x & -x;
}
void add(int pos, int k) {
for (int i = pos; i <= n; i += lowbit(i)) {
c[i] += k;
}
}
ll sum(int pos) {
ll res = 0;
for (int i = pos; i; i -= lowbit(i)) {
res += c[i];
}
return res;
}
ll query(int l, int r) {
return sum(r) - sum(l - 1);
}
int kth(int k) {
int l = 1, r = n, res = n;
while (l <= r) {
int mid = (l + r) / 2;
if (sum(mid) >= k) {
r = mid - 1;
res = mid;
} else l = mid + 1;
}
return res;
}
}BIT;
struct node {
int l, r, id, k;
bool operator < (const node &other) const {
return l < other.l;
}
}Q[MAXN];
struct Node {
int val, id;
bool operator < (const Node &other) const {
return val < other.val;
}
}b[MAXN];
int ans[MAXN];
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> b[i].val;
b[i].id = i;
}
sort(b + 1, b + n + 1);
int cnt = 0;
for (int i = 1; i <= n; i++) {
if (i == 1 || b[i].val != b[i - 1].val) cnt++;
a[b[i].id] = cnt;
}
for (int i = 1; i <= m; i++) {
cin >> Q[i].l >> Q[i].r >> Q[i].k;
Q[i].id = i;
}
sort(Q + 1, Q + m + 1);
int L = 1, R = 0;
for (int i = 1; i <= m; i++) {
while (L < Q[i].l) {
BIT.add(L, -1);
L++;
}
while (R < Q[i].r) {
R++;
BIT.add(R, 1);
}
ans[Q[i].id] = b[BIT.kth(Q[i].k)].val;
}
for (int i = 1; i <= m; i++) {
cout << ans[i] << endl;
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...