看一下题目,可以将题目简化一下:
给定n个区间,对于每个区间,将区间内的所有数+1
先看一下暴力
#include <bits/stdc++.h>
using namespace std;
int n,l,r,tree[1000005],ans=-1;
signed main(){
cin>>n;
while(n--){
cin>>l>>r;
for(int i=l;i<=r;i++){
tree[i]++;
}
}
for(int i=1;i<=1000001;i++){
ans=max(ans,tree[i]);
}
cout<<ans<<endl;
return 0;
}
再看一眼数据范围

每个区间都直接加的话时间复杂度最大应该是,这你不超时谁超时
所以得另想其它的方法
不难发现,这不就是一道差分的板子题嘛
如果不会差分可以自学一下
虽说我也卡了90WA了很长时间
那么这道题就不难做了
核心代码
for(int i=1;i<=n;i++){
cin>>l>>r;
d[l]++,d[r+1]--;
}
所以这道题只要会差分就很简单了
完整代码
#include <bits/stdc++.h>
using namespace std;
int n,l,r,ans,d[1000005],tree[1000005];
signed main(){
cin>>n;
while(n--){
cin>>l>>r;
d[l]++,d[r+1]--;
}
for(int i=0;i<=1000001;i++){
tree[i]=d[i]+tree[i-1];
ans=max(ans,tree[i]);
}
cout<<ans<<endl;
return 0;
}
顺便带一句:是因为补赛的原因吗,第一道题都上普及减了

被折叠的 条评论
为什么被折叠?



