#include<iostream> #include<vector> #include<algorithm> using namespace std; int s[10001]; int main(){ int L, M; cin >> L >> M; int l, r; for(int i = 0; i < M; i++){ cin >> l >> r; s[l] = max(s[l], r - l + 1); } int res = L + 1; int now = 0; for(int i = 0; i <= L; i++){ now = max(now, s[i]); if(now != 0){ res--; now--; } } cout << res << endl; return 0; }
数组s标记了从这点开始之后会有多少个树会被挖掉。
举个例子 比如 200 400和300 350需要挖掉
那么在最后一个for循环的时候
到了200,now会变成201
到了300的时候,res已经被剪掉了101了
s[300]小于now,所以不更新,继续减
浙公网安备 33010602011771号