这题看着像是线段树   然而暴力也可以

而且并没有快多少  交了一发线段树 87ms   暴力125ms。。。。。

线段树   区间查询最大值

https://blog.csdn.net/holly_Z_P_F/article/details/81395652

暴力代码以及线段树代码

#include <iostream>
#include <cstring>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#define pi 3.1415926535898
#define e 2.718281828459
using namespace std;
typedef long long ll;
int main()
{int n;cin>>n;ll a[n];for(int i=0;i<n;i++){cin>>a[i];}int q;cin>>q;while(q--){int i,j,max=0;cin>>i>>j;for(int ii=i;ii<=j;ii++){if(max<=a[ii])max=a[ii];}cout<<max<<endl;max=0;}return 0;
}

线段树代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1e5+7;
struct node{int val,l,r;
}tree[maxn<<2];
int fa[maxn<<2];
int n,m,x,y,date;
void BuildTree(int i,int left,int right){tree[i].l=left;tree[i].r=right;tree[i].val=0;if(left==right){fa[left]=i;return;}BuildTree(i<<1,left,(left+right)/2);BuildTree(i<<1|1,(left+right)/2+1,right);
}
void UpdateTree(int ri){if(ri==1) return ;int fi=ri/2;int a=tree[fi<<1].val;int b=tree[(fi<<1)+1].val;tree[fi].val=a>b?a:b;UpdateTree(ri/2);
}
int Max;
void Query(int i,int l,int r){if(tree[i].l==l&&tree[i].r==r){Max=max(Max,tree[i].val);return ;}i=i<<1;if(l<=tree[i].r){if(r<=tree[i].r) Query(i,l,r);else Query(i,l,tree[i].r);}i++;if(r>=tree[i].l){if(l>=tree[i].l) Query(i,l,r);else Query(i,tree[i].l,r);}
}
int main(){scanf("%d",&n);BuildTree(1,1,n);for(int i=1;i<=n;i++){scanf("%d",&date);tree[fa[i]].val=date;UpdateTree(fa[i]);}scanf("%d",&m);while(m--){scanf("%d%d",&x,&y);Max=0;Query(1,x+1,y+1);printf("%d\n",Max);}return 0;
}

51nod1174--区间中最大的数--线段树相关推荐

  1. D-query SPOJ - DQUERY(主席树求区间中不同的数的个数)

    题意 给出n个数,m个询问,每个询问给出一个区间,需要回答这个区间中不同的数的个数 题目 {assign var="code" value="DQUERY"} ...

  2. 雨中的尾巴(线段树合并+树上差分)

    哇这道题 恶心死我 首先要知道,树上差分一般解决的问题是关于树上的覆盖问题 然后遇到覆盖问题尽量不要打树剖(会慢很多) 关于此题 因为这道题覆盖的是 从xxx到yyy的点 所以我们在 x,yx,yx, ...

  3. [FJOI 2016]bzoj 4408 神秘数 - 线段树

    题目大意:给你一列数,多次询问用一个区间的数字形成一个可重集合,最小的不能被表示为其一个子集的数字是多少. 题解:考虑给你一个可重集合你怎么算:从小到大排序,假设用前x个数字不能表示的最小都数字是an ...

  4. 【51nod - 1174 】区间中最大的数(RMQ问题,ST表,模板)

    题干: 给出一个有N个数的序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有数中,最大的数是多少. 例如: 1 7 6 3 1.i = 1, j = 3,对应的数为7 6 3,最大的数为 ...

  5. 容斥原理之求区间中与某数互质的个数

    一,定义 为了计算时不重不漏,就要不断加减重复部分 观察到:即奇数长度的前面是加号,偶数长度的为减号 二,思路:我们这里可以通过求不互质的数,自然就能得出互质的数,求不互质比较简单(因为他们是目标的质 ...

  6. 【地狱副本】数据结构之线段树Ⅲ——区间最值/赋值/修改/历史值操作(HDU5306,Tyvj 1518,【清华集训2015】V,HDU6315,HDU1828,POJ3162)

    文章目录 Gorgeous Sequence Tyvj 1518 CPU监控 [清华集训2015]V Naive Operations Picture Walking Race Gorgeous Se ...

  7. 如何在vs中创建r树索引代码_线段树详解与实现

    此篇文章用于记录<玩转数据结构>课程的学习笔记 什么是线段树 线段树也被称为区间树,英文名为Segment Tree或者Interval tree,是一种高级的数据结构.这种数据结构更多出 ...

  8. 线段树线段树的创建线段树的查询单节点更新区间更新

    目录 线段树 什么是线段树? 线段树的创建 线段树的查询 单节点更新 区间更新 未完待续 线段树 实现问题:常用于求数组区间最小值 时间复杂度:(1).建树复杂度:nlogn.(2).线段树算法复杂度 ...

  9. BZOJ 4408: [Fjoi 2016]神秘数(可持久化线段树)

    题目描述 http://www.lydsy.com/JudgeOnline/problem.php?id=4408 题目大意:求最小不能被一段区间中某些数的和表示的数.(还是看题面吧) 思路 可持久化 ...

  10. 线段树(区间修改)模板题 Luogu 2357 守墓人

    众所周知,线段树可以在O( log n)的时间内进行很多修改和查询的操作,应用很广. 线段树,顾名思义,是一个二叉树,但是每个节点,存的不是不是"数",而是一个"区间&q ...

最新文章

  1. 一张900w的数据表,怎么把原先要花费17s执行的SQL优化到300ms?
  2. 第14课:Spark RDD解密
  3. hbuilder怎么设置网页的大小_大明:网页字体大小怎么调?教你方法一键搞定
  4. UIBlurEffect实现模糊效果
  5. 使用axios上传照片
  6. 用SAP BSP应用实现图片灰度效果
  7. linux配置文件引用时间,linux时间设置、screen使用、命令分类、hash作用、命令引用及history命令...
  8. Java完全自学手册,从外包到大厂,再到万粉博主都靠它
  9. Makefile教程
  10. excel 连接 mysql_Excel 数据库连接
  11. 微软产品居然出现中文兼容问题
  12. win7虚拟机无法读取U盘或密钥常见解决方法
  13. 网摘:漫谈law、equity、act、statute、code、bill等法律英语词汇
  14. Windows10商店安装Ubuntu 18.04 LTS
  15. CSS遮罩——如何在CSS中使用遮罩
  16. 网页设计志愿招募平台模块
  17. 如何用数学课件制作工具画函数切线
  18. 什么是微信小程序【重点学习系列---干货十足--一文详解】
  19. ubuntu 16.04执行apt-get update失败卡住的解决方法
  20. APUE:fork()、exec()前用fflush()刷新缓冲区的重要性

热门文章

  1. 那些做Android开发必须知道的ADB命令
  2. 学点PYTHON基础的东东--数据结构,算法,设计模式---访问者模式
  3. 如何通过nrpe设置Windows 内存检测
  4. ubuntu和ok6410开发板之间架设nfs
  5. 在Linux下使用命令发送邮件附件
  6. android获取用户点击的坐标
  7. java处理excel的读写
  8. 给予redis和zookeeper的分布式锁
  9. matlab图像的读取和保存
  10. 4.5Python数据处理篇之Matplotlib系列(五)---plt.pie()饼状图