博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ 2859 Matrix Searching(二维线段树)
阅读量:5985 次
发布时间:2019-06-20

本文共 1300 字,大约阅读时间需要 4 分钟。

题目链接:

题意:给出一个n*n的矩阵。每次询问子矩阵的最小值。

思路:节点保存的是一个区间。孩子是将该区间分成四个小矩阵。

const int INF=1000000000;const int N=305;struct node{    int Min,x[2],y[2],son[4];    node(){}    node(int x0,int y0,int x1,int y1)    {        x[0]=x0;        x[1]=x1;        y[0]=y0;        y[1]=y1;        Min=INF;        clr(son,0);    }};node a[N*N*5];int e,n,b[N][N];int C;void up(int t){    int i;    FOR0(i,4)    {        a[t].Min=min(a[t].Min,a[a[t].son[i]].Min);    }}void build(int t,int x0,int y0,int x1,int y1){    a[t]=node(x0,y0,x1,y1);    if(x0==x1&&y0==y1)    {        a[t].Min=b[x0][y0];        return;    }    int i;    FOR0(i,4) a[t].son[i]=++e;    int midX=(x0+x1)>>1;    int midY=(y0+y1)>>1;    int midX1=midX
a[t].x[1]||x1
a[t].y[1]||y1
=a[t].x[1]&&y0<=a[t].y[0]&&y1>=a[t].y[1]) { return a[t].Min; } int ans=INF,i,temp; FOR0(i,4) { temp=query(a[t].son[i],x0,y0,x1,y1); ans=min(ans,temp); } return ans;}int main(){ RD(C); while(C--) { RD(n); int i,j; FOR1(i,n) FOR1(j,n) RD(b[i][j]); build(0,1,1,n,n); int x0,y0,x1,y1,m; RD(m); while(m--) { RD(x0,y0); RD(x1,y1); PR(query(0,x0,y0,x1,y1)); } } return 0;}

  

转载地址:http://szylx.baihongyu.com/

你可能感兴趣的文章
while+case
查看>>
linux运维基础篇 unit8
查看>>
hibernate设置了hbm2ddl.auto不能自动建表和插入java.util.Date日期类型属性报错
查看>>
GANDCRAB V5.0.5勒索病毒软件删除 文件数据恢复
查看>>
Linux学习篇之shell编程基础
查看>>
Java操作文件内容
查看>>
责任链模式在Tomcat中的应用
查看>>
FlexAir获取MAC地址代码
查看>>
mysql常用语句
查看>>
C#界面,C++算法
查看>>
京东酝酿促销战 新电商价格大战猜想
查看>>
Mac终端命令
查看>>
mysql查重
查看>>
修改npm全局安装的位置
查看>>
itext 7 sign pom文件
查看>>
作为首席架构师,我是如何选择并落地架构方案的?
查看>>
20161205 猎豹收藏夹
查看>>
服务器端口
查看>>
Js对字符串和数组的基本操作
查看>>
Zxing 二维码扫描
查看>>