Uva 11297.Census——二维线段树
来源:互联网 发布:python ppt 编辑:程序博客网 时间:2024/06/05 18:02
http://www.bnuoj.com/v3/problem_show.php?pid=19715
二维线段树模板
#include <cstring>#include <cstdio>#include <algorithm>#include <iostream>#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define rep(i,n) for(int i=0;i<(n);++i)const int MAXN = 510;const int inf = 0x3f3f3f3f;using namespace std;int n,m;int Max[MAXN<<2][MAXN<<2],Min[MAXN<<2][MAXN<<2];int maxx,minn;void push_up1(int fa,int rt){ Max[fa][rt]=max(Max[fa][rt<<1],Max[fa][rt<<1|1]); Min[fa][rt]=min(Min[fa][rt<<1],Min[fa][rt<<1|1]);}void push_up2(int fa,int rt){ Max[fa][rt]=max(Max[fa<<1][rt],Max[fa<<1|1][rt]); Min[fa][rt]=min(Min[fa<<1][rt],Min[fa<<1|1][rt]);}void build1(bool isleaf,int fa,int l,int r,int rt){ if(l==r){ if(isleaf){ scanf("%d",&Max[fa][rt]); Min[fa][rt]=Max[fa][rt]; return ; } push_up2(fa,rt); return ; } int mid=l+(r-l)/2; build1(isleaf,fa,lson); build1(isleaf,fa,rson); if(isleaf) push_up1(fa,rt); else push_up2(fa,rt);}void build2(int l,int r,int rt){ if(l==r){ build1(1,rt,1,m,1); return ; } int mid=l+(r-l)/2; build2(lson); build2(rson); build1(0,rt,1,m,1);}void update1(bool isleaf,int fa,int p,int v,int l,int r,int rt){ if(l==r){ if(isleaf){ Max[fa][rt]=Min[fa][rt]=v; } else push_up2(fa,rt); return ; } int mid=(l+r)>>1; if(p<=mid) update1(isleaf,fa,p,v,lson); else update1(isleaf,fa,p,v,rson); if(isleaf) push_up1(fa,rt); else push_up2(fa,rt);}void update2(int x,int y,int v,int l,int r,int rt){ if(l==r){ update1(1,rt,y,v,1,m,1); return ; } int mid=(l+r)>>1; if(x<=mid) update2(x,y,v,lson); else update2(x,y,v,rson); update1(0,rt,y,v,1,m,1);}void query1(int fa,int L,int R,int l,int r,int rt){ if(L<=l&&r<=R){ maxx=max(maxx,Max[fa][rt]); minn=min(minn,Min[fa][rt]); return ; } int mid=(l+r)>>1; if(L<=mid) query1(fa,L,R,lson); if(mid<R) query1(fa,L,R,rson);}void query2(int L1,int R1,int L2,int R2,int l,int r,int rt){ if(L1<=l&&r<=R1){ query1(rt,L2,R2,1,m,1); return ; } int mid=(l+r)>>1; int maxx=-1,minn=inf; if(L1<=mid) query2(L1,R1,L2,R2,lson); if(mid<R1) query2(L1,R1,L2,R2,rson);}int main(){ int v,x1,y1,x2,y2,q; scanf("%d%d",&n,&m); build2(1,n,1); char op[10]; scanf("%d",&q); while(q--){ scanf("%s",op); if(op[0]=='q'){ maxx=-1,minn=inf; scanf("%d%d%d%d",&x1,&y1,&x2,&y2); query2(x1,x2,y1,y2,1,n,1); printf("%d %d\n",maxx,minn); } else{ scanf("%d%d%d",&x1,&y1,&v); update2(x1,y1,v,1,n,1); } } return 0;}
0 0
- Uva 11297.Census——二维线段树
- Uva 11297 Census(二维线段树)
- Uva 11297 Census,二维线段树,板子
- Uva 11297 Census 二维线段树
- UVa 11297 Census 二维线段树模板
- UVa 11297 Census(二维线段树+单点更新)
- UVA-11297-Census(二维线段树RMQ,单点修改)
- uva11297 Census 【二维线段树】
- Uva 11297 Census(线段树)
- UVA11297--Census(二维线段树)
- uva11297 - Census 线段树套线段树
- UVA 11297 Census(2D线段树解决子矩阵的最大最小)
- UVA 11992 二维线段树
- UVA - 11992 —— Fast Matrix Operations 【二维线段树转一维】
- UVA 11992,。。。伪-二维线段树
- UVa 11297 - Census
- uva 11297 Census
- uva 11297 Census
- swift语言-函数part1
- Python字符串学习与使用
- 阿里云服务器数据盘挂载
- 《剑指Offer》学习笔记--面试题8:旋转数组的最小数字
- 配置tomcat默认项目
- Uva 11297.Census——二维线段树
- PowerDesigner提示Existence of index、key、reference错误
- 内部类无法声明
- 解决 requestFeature() must be called before adding content
- android 切换卡顿解决方法
- Linux驱动之input子系统
- Notification多线程 重定向
- Http请求地址
- MySQL百万级数据库查询优化技巧