POJ 2482 Stars in Your Window

来源:互联网 发布:淘宝女装店铺描述范文 编辑:程序博客网 时间:2024/05/21 11:16
//矩形面积并//注意数据范围,虽然坐标x,y在int范围内,但是当x+W,y+H时,可能会超出int//当不考虑点在边界上时,矩形为(x,y)~(x+W,y+H)#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define LL long longconst int maxn = 22222;struct edge{    LL a,b,h;    int s;};bool cmp(const edge &p,const edge &q){    if(p.h==q.h)  return p.s<q.s;    return p.h<q.h;}int lazy[maxn<<2];int v[maxn<<2];LL x[maxn];edge e[maxn];int n,m;int cnt;void pushdown(int rt){    if(lazy[rt]!=0)    {        lazy[rt<<1]+=lazy[rt];        lazy[rt<<1|1]+=lazy[rt];        v[rt<<1]+=lazy[rt];        v[rt<<1|1]+=lazy[rt];        lazy[rt]=0;    }}void pushup(int rt){    v[rt]=max(v[rt<<1],v[rt<<1|1]);}void update(int L,int R,int s,int l,int r,int rt){    if(L<=l&&r<=R)    {        lazy[rt]+=s;        v[rt]+=s;        return;    }    pushdown(rt);    int mid=(l+r)>>1;    if(L<=mid)  update(L,R,s,l,mid,rt<<1);    if(R>mid)  update(L,R,s,mid+1,r,rt<<1|1);    pushup(rt);}void add_rectangel(LL x1,LL y1,LL x2,LL y2,int v){    x[m]=x1;    e[m].a=x1,e[m].b=x2,e[m].h=y1,e[m++].s=v;    x[m]=x2;    e[m].a=x1,e[m].b=x2,e[m].h=y2,e[m++].s=-v;}int bst(LL v,LL x[],int size){    int l,r,mid;    l=0,r=size-1;    while(l<=r)    {        mid=(l+r)>>1;        if(x[mid]==v)  return mid;        if(x[mid]<v)  l=mid+1;        else  r=mid-1;    }    return -1;}int input(){    LL W,H;    if(scanf("%d%lld%lld",&n,&W,&H)==EOF)  return 0;    LL tx,ty;    int tv;    m=0;    for(int i=0;i<n;i++)    {        scanf("%lld%lld%d",&tx,&ty,&tv);        add_rectangel(tx,ty,tx+W,ty+H,tv);    }    sort(e,e+m,cmp);    sort(x,x+m);    cnt=1;    for(int i=1;i<m;i++)    {        if(x[i]!=x[i-1])  x[cnt++]=x[i];    }    return 1;}void solve(){    memset(lazy,0,sizeof(lazy));    memset(v,0,sizeof(v));    int ans=1;    int L,R;    for(int i=0;i+1<m;i++)    {        L=bst(e[i].a,x,cnt);        R=bst(e[i].b,x,cnt)-1;        if(L<=R)        {            update(L,R,e[i].s,0,cnt-1,1);            ans=max(ans,v[1]);        }    }    printf("%d\n",ans);}int main(){    while(input()!=0)    {        solve();    }    return 0;}

0 0
原创粉丝点击