日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

poj 2482 Stars in Your Window (线段树扫描线)

發布時間:2025/4/9 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poj 2482 Stars in Your Window (线段树扫描线) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目大意:

求一個窗體覆蓋最多的星星的權值。


思路分析:

每個星星看成

左下點為x y

右上點為x+w-1 y+h-1 的矩形。

然后求出最大覆蓋的和。


#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #define lson num<<1,s,mid #define rson num<<1|1,mid+1,e #define maxn 10005 using namespace std; typedef long long LL; LL res[maxn<<4]; LL sum[maxn<<4]; LL x[maxn<<4];struct node {LL s,e,h,type;bool operator < (const node &cmp)const{if(h==cmp.h)return type>cmp.type;return h<cmp.h;} }scline[maxn<<1];void pushup(int num) {sum[num]=max(sum[num<<1],sum[num<<1|1]); } void pushdown(int num) {if(res[num]){sum[num<<1]+=res[num];sum[num<<1|1]+=res[num];res[num<<1]+=res[num];res[num<<1|1]+=res[num];res[num]=0;} } void build(int num,int s,int e) {res[num]=0;sum[num]=0;if(s==e)return;int mid=(s+e)>>1;build(lson);build(rson); } void update(int num,int s,int e,int l,int r,LL val) {if(l<=s && r>=e){res[num]+=val;sum[num]+=val;return;}int mid=(s+e)>>1;pushdown(num);if(l<=mid)update(lson,l,r,val);if(r>mid)update(rson,l,r,val);pushup(num); } int main() {LL n,w,h;while(cin>>n>>w>>h){for(int i=1;i<=n;i++){LL ts,te,tt;cin>>ts>>te>>tt;scline[i*2-1].s=ts,scline[i*2-1].e=ts+w-1,scline[i*2-1].h=te,scline[i*2-1].type=tt;scline[i*2].s=ts,scline[i*2].e=ts+w-1,scline[i*2].h=te+h-1,scline[i*2].type=-tt;x[i*2-1]=ts,x[i*2]=ts+w-1;}sort(scline+1,scline+1+n*2);sort(x+1,x+1+n*2);int m=unique(x+1,x+1+n*2)-x;build(1,1,m);LL ans=0;for(int i=1;i<=n*2;i++){int l=lower_bound(x+1,x+m,scline[i].s)-x;int r=lower_bound(x+1,x+m,scline[i].e)-x;update(1,1,m,l,r,scline[i].type);ans=max(ans,sum[1]);}cout<<ans<<endl;}return 0; } /* 2 1 5 0 0 100 0 4 101 */

轉載于:https://www.cnblogs.com/wzjhoutai/p/7353371.html

總結

以上是生活随笔為你收集整理的poj 2482 Stars in Your Window (线段树扫描线)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。