51nod1174--区间中最大的数--线段树
这题看着像是线段树 然而暴力也可以
而且并没有快多少 交了一发线段树 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--区间中最大的数--线段树相关推荐
- D-query SPOJ - DQUERY(主席树求区间中不同的数的个数)
题意 给出n个数,m个询问,每个询问给出一个区间,需要回答这个区间中不同的数的个数 题目 {assign var="code" value="DQUERY"} ...
- 雨中的尾巴(线段树合并+树上差分)
哇这道题 恶心死我 首先要知道,树上差分一般解决的问题是关于树上的覆盖问题 然后遇到覆盖问题尽量不要打树剖(会慢很多) 关于此题 因为这道题覆盖的是 从xxx到yyy的点 所以我们在 x,yx,yx, ...
- [FJOI 2016]bzoj 4408 神秘数 - 线段树
题目大意:给你一列数,多次询问用一个区间的数字形成一个可重集合,最小的不能被表示为其一个子集的数字是多少. 题解:考虑给你一个可重集合你怎么算:从小到大排序,假设用前x个数字不能表示的最小都数字是an ...
- 【51nod - 1174 】区间中最大的数(RMQ问题,ST表,模板)
题干: 给出一个有N个数的序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有数中,最大的数是多少. 例如: 1 7 6 3 1.i = 1, j = 3,对应的数为7 6 3,最大的数为 ...
- 容斥原理之求区间中与某数互质的个数
一,定义 为了计算时不重不漏,就要不断加减重复部分 观察到:即奇数长度的前面是加号,偶数长度的为减号 二,思路:我们这里可以通过求不互质的数,自然就能得出互质的数,求不互质比较简单(因为他们是目标的质 ...
- 【地狱副本】数据结构之线段树Ⅲ——区间最值/赋值/修改/历史值操作(HDU5306,Tyvj 1518,【清华集训2015】V,HDU6315,HDU1828,POJ3162)
文章目录 Gorgeous Sequence Tyvj 1518 CPU监控 [清华集训2015]V Naive Operations Picture Walking Race Gorgeous Se ...
- 如何在vs中创建r树索引代码_线段树详解与实现
此篇文章用于记录<玩转数据结构>课程的学习笔记 什么是线段树 线段树也被称为区间树,英文名为Segment Tree或者Interval tree,是一种高级的数据结构.这种数据结构更多出 ...
- 线段树线段树的创建线段树的查询单节点更新区间更新
目录 线段树 什么是线段树? 线段树的创建 线段树的查询 单节点更新 区间更新 未完待续 线段树 实现问题:常用于求数组区间最小值 时间复杂度:(1).建树复杂度:nlogn.(2).线段树算法复杂度 ...
- BZOJ 4408: [Fjoi 2016]神秘数(可持久化线段树)
题目描述 http://www.lydsy.com/JudgeOnline/problem.php?id=4408 题目大意:求最小不能被一段区间中某些数的和表示的数.(还是看题面吧) 思路 可持久化 ...
- 线段树(区间修改)模板题 Luogu 2357 守墓人
众所周知,线段树可以在O( log n)的时间内进行很多修改和查询的操作,应用很广. 线段树,顾名思义,是一个二叉树,但是每个节点,存的不是不是"数",而是一个"区间&q ...
最新文章
- 一张900w的数据表,怎么把原先要花费17s执行的SQL优化到300ms?
- 第14课:Spark RDD解密
- hbuilder怎么设置网页的大小_大明:网页字体大小怎么调?教你方法一键搞定
- UIBlurEffect实现模糊效果
- 使用axios上传照片
- 用SAP BSP应用实现图片灰度效果
- linux配置文件引用时间,linux时间设置、screen使用、命令分类、hash作用、命令引用及history命令...
- Java完全自学手册,从外包到大厂,再到万粉博主都靠它
- Makefile教程
- excel 连接 mysql_Excel 数据库连接
- 微软产品居然出现中文兼容问题
- win7虚拟机无法读取U盘或密钥常见解决方法
- 网摘:漫谈law、equity、act、statute、code、bill等法律英语词汇
- Windows10商店安装Ubuntu 18.04 LTS
- CSS遮罩——如何在CSS中使用遮罩
- 网页设计志愿招募平台模块
- 如何用数学课件制作工具画函数切线
- 什么是微信小程序【重点学习系列---干货十足--一文详解】
- ubuntu 16.04执行apt-get update失败卡住的解决方法
- APUE:fork()、exec()前用fflush()刷新缓冲区的重要性