社区讨论

新的差分思路

P1047[NOIP 2005 普及组] 校门外的树参与者 2已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@mi6h9wtd
此快照首次捕获于
2025/11/20 04:51
4 个月前
此快照最后确认于
2025/11/20 04:51
4 个月前
查看原帖
本来只是想试着玩玩,没想到真的过掉了2333
这道题作为学习差分也是很好的
首先c[i] 表示 a[i + 1] - a[i],也就是从a[i]到a[i + 1]的变化值
然后区间移走大树的问题就好处理了
最后在循环一遍统计一下有多少树没有被移动就行了
记得因为c[i] 表示的是 a[i + 1] - a[i]
而这道题树的下标是从0开始的,所以要特判一下0的情况,不然会WA一个点
CPP
# include <bits/stdc++.h>
using namespace std;

int c[10010], n, m, k;

int main() { 
    cin >> n >> m;
    for(int i = 1; i <= m; i++) { 
        int l, r;
        cin >> l >> r;
        if(l) c[l - 1]--;   // 可以理解为接下来的a[i] 的值都--
        else k = -1;
        c[r]++;            // 到这里结束
    }
    int ans = 0;
    for(int i = 0; i <= n; i++) { 
        if(!k) ans++;  // !k表示这个位置的树还没有被移动
        k += c[i];
    }
    printf("%d\n", ans);
}

回复

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

正在加载回复...