uva11297 二维线段树
来源:互联网 发布:数据化人生 编辑:程序博客网 时间:2024/05/19 22:50
询问矩阵内一块矩阵的最值和单点修改。
#include<iostream>#include<string>#include<cstring>#include<cstdio>#include<cmath>#include<iomanip>#include<map>#include<algorithm>#include<queue>#include<set>#define inf 1000000000#define pi acos(-1.0)#define eps 1e-8#define seed 131using namespace std;typedef pair<int,int> pii;typedef unsigned long long ull;typedef long long ll;const int maxn=100005;int n,Q;int Min[2005][2005];int Max[2005][2005];int xo,xleaf;int X1,Y1,X2,Y2,v;int vmax,vmin;int a;void build1D(int l,int r,int rt){ if(l==r) { if(xleaf) { scanf("%d",&a); Max[xo][rt]=Min[xo][rt]=a; } else { Max[xo][rt]=max(Max[xo<<1][rt],Max[xo<<1|1][rt]); Min[xo][rt]=min(Min[xo<<1][rt],Min[xo<<1|1][rt]); } return; } int m=(l+r)/2; build1D(l,m,rt<<1); build1D(m+1,r,rt<<1|1); Max[xo][rt]=max(Max[xo][rt<<1],Max[xo][rt<<1|1]); Min[xo][rt]=min(Min[xo][rt<<1],Min[xo][rt<<1|1]);}void build2D(int l,int r,int rt){ if(l==r) { xo=rt; xleaf=1; build1D(1,n,1); return; } int m=(l+r)/2; build2D(l,m,rt<<1); build2D(m+1,r,rt<<1|1); xo=rt; xleaf=0; build1D(1,n,1);}void query1D(int l,int r,int L,int R,int rt){ if(l<=L&&r>=R) { vmin=min(vmin,Min[xo][rt]); vmax=max(vmax,Max[xo][rt]); return; } int m=(L+R)/2; if(l<=m) { query1D(l,r,L,m,rt<<1); } if(r>m) { query1D(l,r,m+1,R,rt<<1|1); }}void query2D(int l,int r,int L,int R,int rt){ if(l<=L&&r>=R) { xo=rt; query1D(Y1,Y2,1,n,1); return; } int m=(L+R)/2; if(l<=m) { query2D(l,r,L,m,rt<<1); } if(r>m) { query2D(l,r,m+1,R,rt<<1|1); }}void update1D(int y,int L,int R,int rt){ if(L==y&&R==y) { if(xleaf) { Min[xo][rt]=Max[xo][rt]=v; return; } else { Min[xo][rt]=min(Min[xo<<1][rt],Min[xo<<1|1][rt]); Max[xo][rt]=max(Max[xo<<1][rt],Max[xo<<1|1][rt]); } return; } int m=(L+R)/2; if(y<=m) { update1D(y,L,m,rt<<1); } else { update1D(y,m+1,R,rt<<1|1); } Min[xo][rt]=min(Min[xo][rt<<1],Min[xo][rt<<1|1]); Max[xo][rt]=max(Max[xo][rt<<1],Max[xo][rt<<1|1]);}void update2D(int x,int L,int R,int rt){ if(x==L&&x==R) { xo=rt; xleaf=1; update1D(Y1,1,n,1); return; } int m=(L+R)/2; if(x<=m) { update2D(x,L,m,rt<<1); } else { update2D(x,m+1,R,rt<<1|1); } xo=rt; xleaf=0; update1D(Y1,1,n,1);}int main(){ char op[2]; scanf("%d",&n); build2D(1,n,1); scanf("%d",&Q); for(int i=0;i<Q;i++) { scanf("%s",op); if(op[0]=='q') { scanf("%d%d%d%d",&X1,&Y1,&X2,&Y2); vmax=0; vmin=inf; query2D(X1,X2,1,n,1); printf("%d %d\n",vmax,vmin); } else { scanf("%d%d%d",&X1,&Y1,&v); update2D(X1,1,n,1); } } return 0;}
0 0
- 二维线段树UVA11297
- uva11297 二维线段树
- uva11297 Census 【二维线段树】
- UVA11297--Census(二维线段树)
- uva11297 - Census 线段树套线段树
- 二维线段树
- poj1656----二维线段树
- poj2155 二维线段树
- hdu1823 二维线段树
- POJ2155 二维线段树
- hdu1823 二维线段树
- HDU1823(二维线段树)
- poj2155 二维线段树
- CUGBACM_Summer_Tranning2【二维线段树】
- 二维线段树
- hdu1823 二维线段树
- hdu4819 二维线段树
- 二维线段树模版
- 经常吹空调皮肤是不是会变黑
- thinkpad E430拆装与升级
- LeetCode题解——Excel Sheet Column Title
- js倒计时代码 支持同一页面多个倒计时代码(转)
- POJ 3352 Road Construction(边双连通分量)
- uva11297 二维线段树
- shopNC分类,递归方式查询层级显示
- LeetCode-Product of Array Except Self
- ViewPager取消左右滑动切换功能
- 关于asp.net网址出现乱码问题的解决方法
- hdu4044GeoDefense 树形dp+分组背包
- 正则表达式简介及学习网址、测试网址
- PPT格式转成PDF的转换操作
- 皮肤变黑的原因