小明在旅游的路上看到了一条美丽的河,河上有许多船只,有的船只向左航行,有的船只向右航 小明希望拍下这一美丽的风景,并且把尽可能多的船只都完整地拍到一张照片中。 小明位于河的边上,并且可以在河边的任意位置进行拍照,照相机的视野恰好为90度角,只能以 于河边的方向进行拍照。河上的船只全都可看作是平行于河边的一条线段,跟河边的距离各不相 有的正在向左移动,有的正在向右移动,但移动速度恰好都是一样的。小明可以等待恰当的时间 量多的船只都走进照相机的视野里,你不需要考虑船只之间会互相遮挡视野的情况。

 

说明:差分&前缀和

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int base=1100000,LIM=2200000;
 4 int n,ri[LIM+5],li[LIM+5],ans;
 5 int main(){
 6     scanf("%d",&n);
 7     for(int i=1;i<=n;i++){
 8         int x,y,z,d;scanf("%d%d%d%d",&x,&y,&z,&d);
 9         x+=base,y+=base;
10         int l=y-z,r=x+z;
11         if(l>r)continue;
12         if(d==1)ri[l]++,ri[r+1]--;
13         else li[l]++,li[r+1]--;
14     }
15     for(int i=1;i<=LIM;i++){
16         li[i]+=li[i-1];
17         ri[i]+=ri[i-1];
18     }
19     for(int i=LIM;i>=1;i--)li[i]=max(li[i],li[i+1]);
20     for(int i=1;i<=LIM;i++)ans=max(ans,ri[i]+li[i]);
21     printf("%d",ans);
22 }