【题解】[POI2006」Tet-Tetris 3D

sol:
考虑用树套树维护二维信息。

这里标记比较复杂,所以不好下传,考虑 标记永久化

每次修改区间的时候,把遍历到的点都修改 mx ,对于完全覆盖的区间则同时修改 tag 和 mx 。(这里的修改可以是区间加,也可以是区间取 max)。

查询的时候,如果是完全覆盖的区间就返回 mx ,否则当前点的 tag 也要做贡献。

时间复杂度 O(nlog^2d) 。

#include<bits/stdc++.h> using namespace std; const int Maxn=1050; int n,m,s; struct node { //mx 利用了区间 max 标记永久化的思想 //基本适用范围: 区间加 ,区间 max //实现方法 :对访问到的所有点的 mx 都取 max int mx[Maxn<<1],tag[Maxn<<1]; //区间取 max void upd(int p,int l,int r,int ql,int qr,int x) { if(ql<=l&&r<=qr) { tag[p]=max(tag[p],x); mx[p]=max(mx[p],x); return; } mx[p]=max(mx[p],x); int mid=l+r>>1; if(ql<=mid) upd(p<<1,l,mid,ql,qr,x); if(mid<qr) upd(p<<1|1,mid+1,r,ql,qr,x); } //区间查 max int qry(int p,int l,int r,int ql,int qr) { if(ql<=l&&r<=qr) { return mx[p]; } int mid=l+r>>1,tmp=tag[p]; if(ql<=mid) tmp=max(tmp,qry(p<<1,l,mid,ql,qr)); if(mid<qr) tmp=max(tmp,qry(p<<1|1,mid+1,r,ql,qr)); return tmp; } }; //外层树同理 node mx[Maxn<<1],tag[Maxn<<1]; int qry(int p,int l,int r,int ql,int qr,int pl,int pr) { if(ql<=l&&r<=qr) { return mx[p].qry(1,1,m,pl,pr); } int mid=l+r>>1,tmp=tag[p].qry(1,1,m,pl,pr); if(ql<=mid) tmp=max(tmp,qry(p<<1,l,mid,ql,qr,pl,pr)); if(mid<qr) tmp=max(tmp,qry(p<<1|1,mid+1,r,ql,qr,pl,pr)); return tmp; } void upd(int p,int l,int r,int ql,int qr,int pl,int pr,int x) { if(ql<=l&&r<=qr) { tag[p].upd(1,1,m,pl,pr,x); mx[p].upd(1,1,m,pl,pr,x); return; } mx[p].upd(1,1,m,pl,pr,x); int mid=l+r>>1; if(ql<=mid) upd(p<<1,l,mid,ql,qr,pl,pr,x); if(mid<qr) upd(p<<1|1,mid+1,r,ql,qr,pl,pr,x); } int main() { // freopen("data.in","r",stdin); scanf("%d%d%d",&n,&m,&s); for(int i=1;i<=s;i++) { int d,s,w,x,y; scanf("%d%d%d%d%d",&d,&s,&w,&x,&y); int he=qry(1,1,n,x+1,x+d,y+1,y+s)+w; upd(1,1,n,x+1,x+d,y+1,y+s,he); } printf("%d",qry(1,1,n,1,n,1,m)); }

__EOF__

本文作者仰望星空的蚂蚁
本文链接https://www.cnblogs.com/cqbzly/p/17530236.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   仰望星空的蚂蚁  阅读(6)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示