最大高度差

Problem 3 : 最大高度差

(altitude.pas/ altitude.in/ altitude.out)

【问题描述】

我们把一块山地划分为N x N的小块。你已经知道了每一块地的海拔高度。你需要回答若干个询问。一次询问指定了一块S x S的正方形区域(S是一个已经给定的值),你需要回答出在这个区域里最小海拔高度和最大海拔高度相差多少。

【输入数据】

第一行输入三个用空格隔开的正整数n,s,k,表示山地的大小、一次询问的大小和询问的次数。输入数据保证s<=n。

以下n行为一个N x N的矩阵,该矩阵描述了这个山地的高度情况。这些数字保证是不超过maxint的正整数。

接下来k行每行两个数x,y,询问以第x行第y列的格子作为左上角的S x S的方格中最大的高度差。输入数据保证输入的x,y有意义。

【输出数据】

对于每一个询问,输出询问的区域中高度差的最大值(每个询问的输出均独立占用一行)。

【样例输入】

5 3 1

5 1 2 6 3

1 3 5 2 7

7 2 4 6 1

9 9 8 6 5

0 6 9 3 9

1 2

【样例输出】

5

【样例说明】

输入数据询问子矩阵:

1 2 6

3 5 2

2 4 6

的最大高度差是多少。

答案为6-1=5。

【数据规模】

对于30%的数据,n<=10,k<=10;

对于50%的数据,n<=30,k<=100;

对于100%的数据,n<=100,k<=1000。

模拟暴力即可。

#include<iostream>
using namespace std;

void in(int &x)
{
    int y=1;
    char c=getchar();x=0;
    while(c>‘9‘||c<‘0‘)
    {
        if(c==‘-‘)
        y=-1;
        c=getchar();
    }
    while(c>=‘0‘&&c<=‘9‘)
    x=x*10+c-‘0‘,c=getchar();
    x*=y;
}

void out(int x)
{
    if(x<0)
    {
        putchar(‘-‘);
        x=-x;
    }
    if(x>9)out(x/10);
    putchar(x%10+‘0‘);
}

int n,s,k;
int a[110][110];
int main()
{
    freopen("altitude.in","r",stdin);
    freopen("altitude.out","w",stdout);
    in(n),in(s),in(k);
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)
        in(a[i][j]);
    int x,y;
    int Min,Max;
    for(int t=1;t<=k;t++)
    {
        Min=0xf77777777;
        Max=0;
        in(x),in(y);
        for(int i=x;i<x+s;i++)
          for(int j=y;j<y+s;j++)
            {
                Max=max(Max,a[i][j]);
                Min=min(Min,a[i][j]);
            }
        out(Max-Min),putchar(‘\n‘);
    }
    return 0;
}
时间: 2024-10-09 21:16:04

最大高度差的相关文章

C++求二叉树的最大高度差

#include <iostream> #include <string.h> using namespace std; template<typename Type> struct Node { Type data; Node *left; Node *right; Node(Type d = Type()):data(d),left(NULL),right(NULL){} //vs2013太变态了,一个空格出现未知文件尾出错,我找了10分钟. }; template

【二叉树】 二叉树基础

在计算机科学中,二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subtree).二叉树常被用于实现二叉查找树和二叉堆. 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒.二叉树的第i层至多有个结点:深度为k的二叉树至多有个结点:对任何一棵二叉树T,如果其终端结点数为,度为2的结点数为,则. 树和二叉树的三个主要差别: 树的结点个数至少为1,而二叉树的

AVL树

定义:AVL树是每个节点左子树和右子树的高度差最大为1的二叉查找树 不平衡节点:假设在懒惰删除(删除操作时,并不删除节点,只是对节点进行特定标记)的条件下,插入操作有可能破坏AVL树的平衡特性. 如果插入节点导致平衡性被破坏,那么平衡性遭到破坏的节点只可能出现在插入节点到根节点的路径上.因为插入操作只会改变 插入节点的父节点的高度,而这些父节点就再这条路径上. 调整:对于平衡性遭到破坏的节点,需要对其进行调整以恢复平衡性.调整的方法称为旋转,针对不同的插入情况,调整操作稍有不同. 下面先对插入情

数据结构(二)非线性结构之二叉树

没有天生的信心,只有不断培养的信心. /** *@author StormMaybin @Date 2016-07-17 */ 上上一篇文章总结了一下线性表,今天就来总结一下数据结构中非线性部分,非线性数据结构包括树图以及网!今天我们先来看看二叉树!二叉树是一种特殊的树结构.在计算机科学中,二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subtree).二叉树常被用于实现二叉查找树和二叉堆. 基

CF 57C

题意是求出长度为n仅由1到n数字组成的非降序列与非升序列的个数,转化为求非降序列(非升序列)的个数.n个元素想象为n个离散的点x1,x2,x3,...,xn,在最开头补上一个点x0为1,在最末尾补上一个点xn+1为n,两个相邻点之间的高度差为hi=xi+1-xi,hi>=0.可列出h1+h2+h3+...+hn+1=n-1,将hi加上1,则h1+h2+h3+...+hn+1+n+1=2n,在2n-1个位置放n块隔板,则答案为C2n-1 n.

大话数据结构—平衡二叉树(AVL树)

平衡二叉树(Self-Balancing Binary Search Tree/Height-Balanced Binary Search Tree),是一种二叉排序树,其中每一个节点的左子树和右子树的高度差至多等于1. 平衡二叉树的前提是二叉排序树,不是二叉排序树的都不是平衡二叉树. 平衡因子BF(Balance Factor):二叉树上节点的左子树深度减去右子树深度的值. 最小不平衡子树:距离插入节点最近的,且平衡因子的绝对值大于1的节点为根的子树. 下图中,新插入节点37时,距离它最近的平

Balanced Binary Tree(平衡二叉树)

来源:https://leetcode.com/problems/balanced-binary-tree Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never diff

二叉树基本概念

1. 高度:树T所有节点深度的最大值,节点V对应子树高度为该节点的高度,根节点高度为整棵树的高度 2.深度:节点V到根节点R的唯一路径所经过的数目称为V的深度 3.huffman编码:构造出的带权平均深度最小的二叉树为huffman树(权值越大,深度越小) 4.二叉搜索树:任意节点R的左(右)子树中,所有节点均不大(小)于R; 5.满二叉树:在二叉树中,其所有分支节点都存在左右节点,并且所有叶子节点都在同一层 6.完全二叉树:对一棵具有n个结点的二叉树按层序编号,如果编号为i(1≤i≤n)的结点

引擎设计跟踪 ShadowMap 细节和分析

之前在工作总汇总了shadowmap的各种问题 [工作积累] shadow map问题汇总 最近有点时间再仔细研究了shadowmap的一些算法.主要修复了LiSPSM(上面链接里后面有更新),实现了TSM和CSM阴影. 总的来说,CSM只是结构上的不同,多了拆分和几个pass,实现起来相对比较简单.LiSPSM和TSM调试至于为什么要研究LiSPSM和TSM,主要是在不能使用CSM的时候(比如低配,mobile之类),可以有更好的效果.另外,CSM和LiSPSM.TSM并不冲突,每个pass可