求调,悬3关
查看原帖
求调,悬3关
1046894
hyxgg楼主2024/12/22 14:35

如题,代码如下,码风良好

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,t,q,m;
struct xds
{
    int bj[4000],mx[4000];
    void gc(int b,int l,int r,int x,int y,int z){
        if(r<x||l>y)return;
        mx[b]=max(mx[b],z);
        if(x<=l&&r<=y){
            bj[b]=max(bj[b],z);
            return ;
        }
        int mid=(l+r)>>1;
        gc(b<<1,l,mid,x,y,z),gc(b<<1|1,mid+1,r,x,y,z);
    }
    int cc(int b,int l,int r,int x,int y){
        if(r<x||l>y)return 0;
        int dx=0;
        dx=max(bj[b],dx);
        if(x<=l&&r<=y){
            dx=max(dx,mx[b]);
            return dx;
        }
        int mid=(l+r)>>1;
        return max(max(cc(b<<1,l,mid,x,y),cc(b<<1|1,mid+1,r,x,y)),dx);
    }
}bj[4000],mx[4000];
void gc(int b,int l,int r,int x,int y,int x1,int y1,int z){
    if(r<x||l>y)return;
    mx[b].gc(1,1,m,x1,y1,z);
    if(x<=l&&r<=y){
        bj[b].gc(1,1,m,x1,y1,z);
        return ;
    }
    int mid=(l+r)>>1;
    gc(b<<1,l,mid,x,y,x1,y1,z),gc(b<<1|1,mid+1,r,x,y,x1,y1,z);
}
int cc(int b,int l,int r,int x,int y,int x1,int y1){
    if(r<x||l>y)return 0;
    int dx=0;
    dx=max(bj[b].cc(1,1,m,x1,y1),dx);
    if(x<=l&&r<=y){
        dx=max(dx,mx[b].cc(1,1,m,x1,y1));
        return dx;
    }
    int mid=(l+r)>>1;
    return max(max(cc(b<<1,l,mid,x,y,x1,y1),cc(b<<1|1,mid+1,r,x,y,x1,y1)),dx);
}
int main(){
    int aa,x,y,d,s;
    scanf("%d%d%d",&n,&m,&q);
    while(q--){
        scanf("%d%d%d%d%d",&d,&s,&aa,&x,&y);
        x++,y++,d--,s--;
        gc(1,1,n,x,x+d,y,y+s,cc(1,1,n,x,x+d,y,y+s)+aa);
    }
    printf("%d",mx[1].mx[1]);
    return 0;
}
2024/12/22 14:35
加载中...