1 条题解

  • 0
    @ 2026-10-18 21:32:25

    [NOIP 2005 普及组] 校门外的树

    知识点

    数组、区间标记、计数

    解题思路

    道路位置0到L初始都有树。对每个施工区间[l,r]逐点标记为移除,最后统计未被移除的位置。

    正确性说明

    每个位置被标记当且仅当它属于至少一个施工区间。重复标记不影响结果,最终未标记的位置与保留的树一一对应。

    易错点

    道路两端0和L都各有一棵树,所以初始总数为L+1;施工区间含左右端点;重叠区间不能重复扣树。

    复杂度

    最坏时间O(ML+L),空间O(L),符合本题范围。

    参考代码(GNU C++17)

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        int L,M;cin>>L>>M;vector<bool> removed(L+1,false);
        while(M--){int l,r;cin>>l>>r;for(int i=l;i<=r;++i)removed[i]=true;}
        int ans=0;for(bool x:removed) if(!x)++ans;
        cout<<ans<<'\n';
    }
    
    • 1

    信息

    ID
    81
    时间
    1000ms
    内存
    256MiB
    难度
    进阶
    标签
    递交数
    1
    已通过
    1
    上传者