【题目分析】

二维线段树模板题目。

简直就是无比的暴力。时间复杂度为两个log。

标记的更新方式比较奇特,空间复杂度为N^2。

模板题目。

【代码】

#include <cstdio>
#include <cstring>
//#include <cmath>
#include <cstdlib> #include <map>
#include <set>
#include <queue>
#include <string>
#include <iostream>
#include <algorithm> using namespace std; #define maxn 505
#define inf 0x3f3f3f3f
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i) void Finout()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
#endif
} int Getint()
{
int x=0,f=1; char ch=getchar();
while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();}
while (ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();}
return x*f;
} int mx[maxn<<2][maxn<<2],mn[maxn<<2][maxn<<2],rt[maxn<<2],ma[maxn][maxn],n;
int x,y,c,tot=0,x1,x2,y1,y2; void pushup(int rt,int o)
{
mx[rt][o]=max(mx[rt][o<<1],mx[rt][o<<1|1]);
mn[rt][o]=min(mn[rt][o<<1],mn[rt][o<<1|1]);
} void update(int rt,int o,int l,int r)
{
// printf("update %d %d %d %d\n",rt,o,l,r);
if (l==r)
{
mx[rt][o]=max(mx[rt<<1][o],mx[rt<<1|1][o]);
mn[rt][o]=min(mn[rt<<1][o],mn[rt<<1|1][o]);
return;
}
int mid=l+r>>1;
if (y<=mid) update(rt,o<<1,l,mid);
else update(rt,o<<1|1,mid+1,r);
pushup(rt,o);
} void push(int rt,int o,int l,int r)
{
if (l==r)
{
mx[rt][o]=mn[rt][o]=c;
return ;
}
int mid=l+r>>1;
if (y<=mid) push(rt,o<<1,l,mid);
else push(rt,o<<1|1,mid+1,r);
pushup(rt,o);
} void modi(int o,int l,int r)
{
if (l==r){push(o,1,1,n);return;}
int mid=l+r>>1;
if (x<=mid) modi(o<<1,l,mid);
else modi(o<<1|1,mid+1,r);
update(o,1,1,n);
} char opt[11];int amx,amn,q; void queryy(int rt,int o,int l,int r)
{
// printf("queryy %d %d %d %d\n",rt,o,l,r);
if (y1<=l&&r<=y2)
{
amx=max(amx,mx[rt][o]);
amn=min(amn,mn[rt][o]);
return ;
}
int mid=l+r>>1;
if (y1<=mid) queryy(rt,o<<1,l,mid);
if (y2>mid) queryy(rt,o<<1|1,mid+1,r);
} void queryx(int o,int l,int r)
{
// printf("query x %d %d %d\n",o,l,r);
if (x1<=l&&r<=x2){ return queryy(o,1,1,n); }
int mid=l+r>>1;
if (x1<=mid) queryx(o<<1,l,mid);
if (x2>mid) queryx(o<<1|1,mid+1,r);
} int main()
{
memset(mx,-0x3f,sizeof mx);
memset(mn, 0x3f,sizeof mn);
Finout();
n=Getint();
F(i,1,n) F(j,1,n)
{
x=i;y=j;
c=ma[i][j]=Getint();
modi(1,1,n);
}
// cout<<mx[1][1]<<" "<<mn[1][1]<<endl;
q=Getint();
F(i,1,q)
{
scanf("%s",opt);
if (opt[0]=='c')
{
x=Getint(); y=Getint(); c=Getint();
modi(1,1,n);
}
else
{
x1=Getint(); y1=Getint(); x2=Getint(); y2=Getint();
amx=-inf,amn=inf;
queryx(1,1,n);
printf("%d %d\n",amx,amn);
}
}
}

  

UVA 11297 Census ——二维线段树的更多相关文章

  1. UVa 11297 Census (二维线段树)

    题意:给定上一个二维矩阵,有两种操作 第一种是修改 c x y val 把(x, y) 改成 val 第二种是查询 q x1 y1 x2 y2 查询这个矩形内的最大值和最小值. 析:二维线段树裸板. ...

  2. UVA 11297 Census(二维线段树)

    Description This year, there have been many problems with population calculations, since in some cit ...

  3. UVA 11297 线段树套线段树(二维线段树)

    题目大意: 就是在二维的空间内进行单个的修改,或者进行整块矩形区域的最大最小值查询 二维线段树树,要注意的是第一维上不是叶子形成的第二维线段树和叶子形成的第二维线段树要  不同的处理方式,非叶子形成的 ...

  4. POJ2155 Matrix二维线段树经典题

    题目链接 二维树状数组 #include<iostream> #include<math.h> #include<algorithm> #include<st ...

  5. HDU 1823 Luck and Love(二维线段树)

    之前只知道这个东西的大概概念,没具体去写,最近呵呵,今补上. 二维线段树 -- 点更段查 #include <cstdio> #include <cstring> #inclu ...

  6. poj 2155:Matrix(二维线段树,矩阵取反,好题)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17880   Accepted: 6709 Descripti ...

  7. poj 1195:Mobile phones(二维线段树,矩阵求和)

    Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 14391   Accepted: 6685 De ...

  8. POJ 2155 Matrix (二维线段树)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17226   Accepted: 6461 Descripti ...

  9. HDU 4819 Mosaic (二维线段树)

    Mosaic Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)Total S ...

随机推荐

  1. 抽象常量class

    需要把经常用到的常量抽象到一个类里面管理 如:

  2. 多源最短路径floyd

    #include<iostream> #define INF 105 using namespace std; int main() { ][],mark,x,y,g; while(cin ...

  3. C# DateTime.Now函数

    // 2008年4月24日 System.DateTime.Now.ToString( " D " );// 2008-4-24 System.DateTime.Now.ToStr ...

  4. 前端性能优化:细说JavaScript的加载与执行

    本文主要是从性能优化的角度来探讨JavaScript在加载与执行过程中的优化思路与实践方法,既是细说,文中在涉及原理性的地方,不免会多说几句,还望各位读者保持耐心,仔细理解,请相信,您的耐心付出一定会 ...

  5. Web中打印的各种方案参考

    http://blog.csdn.net/chinahuyong/article/details/42527491

  6. 题解 CF440A 【Forgotten Episode】

    博客阅读更好 虽然这道题是紫题,但实际难度应该是橙题吧 首先,看到标签…… 紫题?但题目也太…… 这道题教会我们不要看标签 好了,废话少说,看到楼下许多大佬都用了数组,但我觉得可以不用 为什么? 我也 ...

  7. 监控linux各主机系统时间是否一致

    #!/bin/bashSTATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3PASSWD='**************'print_h ...

  8. iOS开发--使用OpenSSL生成私钥和公钥的方法

    最近要在新项目中使用支付宝钱包进行支付,所以要调研对接支付宝的接口,支付宝开放平台采用了RSA安全签名机制,开发者可以通过支付宝   公钥验证消息来源,同时可使用自己的私钥对信息进行加密,所以需要在本 ...

  9. Gentoo更新portage记录

    小记一下这两天更新服务器版本遇到的各种问题. 服务器系统: Gentoo 第一天 其实本来不打算更新系统的,因为最近想试试免费的SSL证书,于是自然而然搜到了letsencrypt,跟着他们的流程需要 ...

  10. visibilitychange 标签可见性

    var pageVisibility = document.visibilityState;// 监听 visibility change 事件document.addEventListener('v ...