校门外的树
校门外的树
https://ac.nowcoder.com/acm/problem/16649
思路:
能暴力就先先一下暴力,题目差不多就会一半了。
1.每次输入左右区间就把数组对应位置+1表示这棵树被移走,重复的部分多次+1不要紧,我们的结果是有多少个元素值是0。
2.,好像不会超时,考虑更优的做法。
差分+前缀和
1.给一个区间加上一个值,我们只要考虑两个端点,中间的元素不需要考虑。
2.前缀和,理解为第位的值比第位大。
3,接着考虑区间赋值的问题,区间加上1,那么第L个位置比第L-1个位置大1,第R+1个位置比第R个位置小1,所以可以先预处理,最后再一遍前缀和得到最终的数组,里面0的个数就是剩余树的个数。
想过离散化,挺有意义的,数据也不大,懒得写了,鸽了。
Code:
#include<bits/stdc++.h> #define js ios::sync_with_stdio(false);cin.tie(0);cout.tie(0) using namespace std; typedef long long ll; int a[10005],ans; int main() { js; int l,m,x,y; cin>>l>>m; for(int i=1;i<=m;++i) { cin>>x>>y; a[x]+=1; a[y+1]-=1; } for(int i=0;i<=l;++i) { a[i]+=a[i-1]; if(!a[i]) ++ans; } cout<<ans<<endl; return 0; }
牛客算法竞赛入门课第一节例题、习题 文章被收录于专栏
为雨巨打call