小明在旅游的路上看到了一条美丽的河,河上有许多船只,有的船只向左航行,有的船只向右航 小明希望拍下这一美丽的风景,并且把尽可能多的船只都完整地拍到一张照片中。 小明位于河的边上,并且可以在河边的任意位置进行拍照,照相机的视野恰好为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 }
















