线段树求助
查看原帖
线段树求助
433439
sherkevin楼主2023/5/30 21:35
#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;
}
2023/5/30 21:35
加载中...