社区讨论
线段树求助
P9343一曲新词酒一杯参与者 6已保存回复 9
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @lo2i8sne
- 此快照首次捕获于
- 2023/10/23 14:16 2 年前
- 此快照最后确认于
- 2023/10/23 14:16 2 年前
C
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 2e5 + 10;
int n, m, T;
struct node {
int l, r;
int sum;
}tr[4 * N];
void build(int id, int l, int r) {
tr[id] = {l, r, 0};
if(l == r) return ;
int mid = (l + r) >> 1;
build(id << 1, l, mid);
build(id << 1 | 1, mid + 1, r);
}
void add(int id, int l, int r) {
if(l > r) return ;
if(tr[id].l >= l && tr[id].r <= r) {
tr[id].sum = tr[id].r - tr[id].l + 1;
return ;
}
int mid = (tr[id].l + tr[id].r) >> 1;
if(l <= mid) add(id << 1, l, r);
if(r > mid) add(id << 1 | 1, l, r);
tr[id].sum = tr[id << 1].sum + tr[id << 1 | 1].sum;
}
int main() {
cin >> T;
while(T --) {
cin >> n >> m;
build(1, 1, n);
bool can = false;
for(int i = 1; i <= m; i ++) {
int op, x;
cin >> op >> x;
if(op == 1) {
add(1, x, x);
} else {
add(1, 1, x - 1);
add(1, x + 1, n);
}
if(tr[1].sum == n) {
cout << i << endl;
can = true;
break;
}
}
if(!can) cout << -1 << endl;
}
return 0;
}
回复
共 9 条回复,欢迎继续交流。
正在加载回复...