社区讨论

问题依然无法解决,求助

灌水区参与者 2已保存回复 9

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
9 条
当前快照
1 份
快照标识符
@losf67j6
此快照首次捕获于
2023/11/10 17:32
2 年前
此快照最后确认于
2023/11/10 20:06
2 年前
查看原帖
为什么全是RE啊啊啊啊
CPP
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+100;
int n, m;
int col[maxn << 2], tag[maxn << 2];
void up(int n) {
    col[n] = col[n << 1] | col[n << 1|1];
}
void down(int l, int r, int n) {
    if(tag[n]) {
        tag[n << 1] = tag[n << 1 |1] = (1 << tag[n]);
        col[n << 1] = col[n << 1] | (1 << tag[n << 1]);
        col[n << 1|1] = col[n << 1|1] | (1 << tag[n <<1|1]);
        tag[n] = 0;
    }
}
void build(int l, int r, int n) {
    if(l == r) {
        col[n] = 1;
        return;
    }
    int mid = (l + r) >>1;
    build(l, mid, n<<1);
    build(mid +1, r, n<<1 |1);
    up(n);
}
void change(int a, int b, int k, int l, int r, int n) {
    if(a <= l && r <= b) {
        tag[n] = (1 << k);
        col[n] = (1 << k);
        return;
    }
    down(l, r, n);
    int mid = ( l+ r) >> 1;
    if(mid >= a) change(a, b, k, l, mid , n<<1);
    if(mid < b) change(a, b, k, mid+1, r, n<<1|1);
    up(n);
}
int query(int a,int b, int l, int r, int n) {
    if(a <= l && r <= b) {
        return col[n];
    }
    down(l, r, n);
    int mid = (l + r) >>1;
    int ans = 1;
    if(mid >=a) ans |= query(a, b, l, mid , n <<1);
    if(mid < b) ans |= query(a, b, mid+1, r, n<<1|1);
    return ans;
}
int bit[(1 << 16)];
int sol(int a, int b) {
    int ans = query(a, b, 1, n , n);
    ans = bit[ans >> 16] + bit[ans & ((1 << 16) - 1)];
    return ans;
}
int main() {
    int t;
    cin >> n  >> t >> m;
    bit[1] =1;
    for(int i = 2; i <= (1 << 16); i++) {
        bit[i] = bit[(i >> 1)] + (i & 1);
    }
    build(1, n, n);
    while(m--) {
        char m[2];
        scanf("%s", m);
        int a, b;
        if(m[0] == 'C'){
            int c;
            scanf("%d%d%d", &a, &b, &c);
            if(a > b) swap(a, b);
            change(a, b, c, 1, n, n);
        }
        else {
            scanf("%d%d", &a, &b);
            if(a > b) swap(a, b);
            int ans = sol(a, b);
            printf("%d\n", ans);
        }
    }
    return 0;
}

求助, P1558

回复

9 条回复,欢迎继续交流。

正在加载回复...