题目大意:二维空间点修改,询问矩形区域最值。

题目分析:还是比较简单的。

代码如下:

# include<iostream>
# include<cstdio>
# include<cstring>
# include<algorithm>
using namespace std;
# define LL long long
# define mid (l+(r-l)/2) const int N=500;
const int INF=0x7fffffff; int maxn[N*4+5][N*4+5];
int minn[N*4+5][N*4+5]; bool leaf; void pushUpY(int id,int rt)
{
maxn[id][rt]=max(maxn[id][rt<<1],maxn[id][rt<<1|1]);
minn[id][rt]=min(minn[id][rt<<1],minn[id][rt<<1|1]);
} void buildY(int id,int rt,int l,int r)
{
if(l==r){
if(leaf){
int a;
scanf("%d",&a);
maxn[id][rt]=minn[id][rt]=a;
}else{
maxn[id][rt]=max(maxn[id<<1][rt],maxn[id<<1|1][rt]);
minn[id][rt]=min(minn[id<<1][rt],minn[id<<1|1][rt]);
}
}else{
buildY(id,rt<<1,l,mid);
buildY(id,rt<<1|1,mid+1,r);
pushUpY(id,rt);
}
} void buildX(int rt,int l,int r,int m)
{
if(l==r){
leaf=true;
buildY(rt,1,1,m);
}else{
buildX(rt<<1,l,mid,m);
buildX(rt<<1|1,mid+1,r,m);
leaf=false;
buildY(rt,1,1,m);
}
} void updateY(int id,int rt,int l,int r,int p,int v)
{
if(l==r){
if(leaf) maxn[id][rt]=minn[id][rt]=v;
else{
maxn[id][rt]=max(maxn[id<<1][rt],maxn[id<<1|1][rt]);
minn[id][rt]=min(minn[id<<1][rt],minn[id<<1|1][rt]);
}
}else{
if(p<=mid) updateY(id,rt<<1,l,mid,p,v);
else updateY(id,rt<<1|1,mid+1,r,p,v);
pushUpY(id,rt);
}
} void updateX(int rt,int l,int r,int p1,int p2,int v,int m)
{
if(l==r){
leaf=true;
updateY(rt,1,1,m,p2,v);
}else{
if(p1<=mid) updateX(rt<<1,l,mid,p1,p2,v,m);
else updateX(rt<<1|1,mid+1,r,p1,p2,v,m);
leaf=false;
updateY(rt,1,1,m,p2,v);
}
} void queryY(int id,int rt,int l,int r,int L,int R,int &mx,int &mn)
{
if(L<=l&&r<=R){
mx=max(mx,maxn[id][rt]);
mn=min(mn,minn[id][rt]);
}else{
if(L<=mid) queryY(id,rt<<1,l,mid,L,R,mx,mn);
if(R>mid) queryY(id,rt<<1|1,mid+1,r,L,R,mx,mn);
}
} void queryX(int rt,int l,int r,int L,int R,int L1,int R1,int &mx,int &mn,int m)
{
if(L<=l&&r<=R){
queryY(rt,1,1,m,L1,R1,mx,mn);
}else{
if(L<=mid) queryX(rt<<1,l,mid,L,R,L1,R1,mx,mn,m);
if(R>mid) queryX(rt<<1|1,mid+1,r,L,R,L1,R1,mx,mn,m);
}
} int main()
{
int n,q,a,b,c,d;
char op[2];
while(~scanf("%d",&n))
{
buildX(1,1,n,n);
scanf("%d",&q);
while(q--)
{
scanf("%s",op);
if(op[0]=='c'){
scanf("%d%d%d",&a,&b,&c);
updateX(1,1,n,a,b,c,n);
}else if(op[0]=='q'){
scanf("%d%d%d%d",&a,&b,&c,&d);
int ansA=-INF,ansB=INF;
queryX(1,1,n,a,c,b,d,ansA,ansB,n);
printf("%d %d\n",ansA,ansB);
}
}
}
return 0;
}

  

UVA-11297 Census(线段树套线段树)的更多相关文章

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

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

  2. bzoj 3196 Tyvj 1730 二逼平衡树(线段树套名次树)

    3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1807  Solved: 772[Submit][Stat ...

  3. [BZOJ 1901] Dynamic Rankings 【树状数组套线段树 || 线段树套线段树】

    题目链接:BZOJ - 1901 题目分析 树状数组套线段树或线段树套线段树都可以解决这道题. 第一层是区间,第二层是权值. 空间复杂度和时间复杂度均为 O(n log^2 n). 线段树比树状数组麻 ...

  4. ZJOI 2017 树状数组(线段树套线段树)

    题意 http://uoj.ac/problem/291 思路 不难发现,九条カレン醬所写的树状数组,在查询区间 \([1,r]\) 的时候,其实在查询后缀 \([r,n]\) :在查询 \([l,r ...

  5. BZOJ4317Atm的树&BZOJ2051A Problem For Fun&BZOJ2117[2010国家集训队]Crash的旅游计划——二分答案+动态点分治(点分树套线段树/点分树+vector)

    题目描述 Atm有一段时间在虐qtree的题目,于是,他满脑子都是tree,tree,tree…… 于是,一天晚上他梦到自己被关在了一个有根树中,每条路径都有边权,一个神秘的声音告诉他,每个点到其他的 ...

  6. hdu-4819-线段树套线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=4819 给出一个N*N的矩阵,每次询问一个m*m的子矩阵里的floor((maxv+minv)/2)并把中间的元素 ...

  7. dfs序+主席树 或者 树链剖分+主席树(没写) 或者 线段树套线段树 或者 线段树套splay 或者 线段树套树状数组 bzoj 4448

    4448: [Scoi2015]情报传递 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 588  Solved: 308[Submit][Status ...

  8. 【vijos】1750 建房子(线段树套线段树+前缀和)

    https://vijos.org/p/1750 是不是我想复杂了.... 自己yy了个二维线段树,然后愉快的敲打. 但是wa了两法.......sad 原因是在处理第二维的更新出现了个小问题,sad ...

  9. [TJOI2017][bzoj4889] 不勤劳的图书管理员 [线段树套线段树]

    题面 传送门 思路 考虑两本书的位置交换对答案的贡献: (为了方便描述,用"左边那本"和"右边那本"称呼两本我们要交换的书,"中间那本"是我 ...

  10. 【bzoj4785】[Zjoi2017]树状数组 线段树套线段树

    题目描述 漆黑的晚上,九条可怜躺在床上辗转反侧.难以入眠的她想起了若干年前她的一次悲惨的OI 比赛经历.那是一道基础的树状数组题.给出一个长度为 n 的数组 A,初始值都为 0,接下来进行 m 次操作 ...

随机推荐

  1. js继承之call,apply和prototype随谈

    在js中,call,apply和prototype都可以实现对象的继承,下面我们看一个例子: function FatherObj1() { this.sayhello = "I am jo ...

  2. Spring + Mybatis 使用 PageHelper 插件分页

    原文:http://www.cnblogs.com/yucongblog/p/5330886.html 先增加maven依赖: <dependency> <groupId>co ...

  3. BootStrapt iCheck表单美化插件使用方法详解(含参数、事件等) 全选 反选

    特色: 1.在不同浏览器(包括ie6+)和设备上都有相同的表现 — 包括 桌面和移动设备 2.支持触摸设备 — iOS.Android.BlackBerry.Windows Phone等系统 4.方便 ...

  4. PHP基础示例:用PHP+Mysql编写简易新闻管理系统[转]

    实现目标:使用php和mysql操作函数实现一个新闻信息的发布.浏览.修改和删除操作 实现步骤: 一.创建数据库和表 1.创建数据库和表:newsdb 2.创建表格:news 字段:新闻id,标题,关 ...

  5. Swift 01.String

    1.字符串拼接 var num1 = "hello,world" var name = "xiaoming" var age = let student = n ...

  6. Rhel6-vpn配置文档

    系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 192.168.122.160 server60.example.com 192.168.12 ...

  7. 使用 HttpClient 和 HtmlParser 实现简易爬虫

    这篇文章介绍了 HtmlParser 开源包和 HttpClient 开源包的使用,在此基础上实现了一个简易的网络爬虫 (Crawler),来说明如何使用 HtmlParser 根据需要处理 Inte ...

  8. Nodejs学习笔记(一)--- 简介及安装Node.js开发环境

    目录 学习资料 简介 安装Node.js npm简介 开发工具 Sublime Node.js开发环境配置 扩展:安装多版本管理器 学习资料 1.深入浅出Node.js http://www.info ...

  9. web前端基础篇⑥

    LESS.①是一种拓展技术,基于css.②包含变量.混合.函数.运算.③简化css代码.降低维护成本④目前用的解析器(koala) 变量(值可变)@变量名:值步骤:①建立文件夹②建html和less两 ...

  10. GFT_News Auto

    using AnfleCrawler.Common; using Newtonsoft.Json.Linq; using System; using System.Collections.Generi ...