Lightoj1093 【线段树】
题意:
给出n个数,然后对于D区间的数求一个最大差值
思路:
区间最大最小。。。我居然没想到线段树。。。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1e5+10; struct SegT{
int left;
int right;
int mid;
int tmin,tmax;
};
SegT q[N*4];
int n; void Build(int num,int L ,int R)
{
int mid;
q[num].left=L;
q[num].right=R;
mid=(L+R)/2;
if(L==R)
{
scanf("%d",&q[num].tmax);
q[num].tmin=q[num].tmax;
return;
}
Build(2*num,L,mid);
Build(2*num+1,mid+1,R);
q[num].tmin=min(q[2*num].tmin,q[2*num+1].tmin);
q[num].tmax=max(q[2*num].tmax,q[2*num+1].tmax);
} int query_min(int num,int s, int t)
{
if(q[num].left>=s&&q[num].right<=t)
return q[num].tmin;
int mid=(q[num].left+q[num].right)/2;
if(mid>=t)
return query_min(2*num,s,t);
else if(mid<s)
return query_min(2*num+1,s,t);
else
return min(query_min(2*num,s,mid),query_min(2*num+1,mid+1,t));
} int query_max(int num,int s, int t)
{
if(q[num].left>=s&&q[num].right<=t)
return q[num].tmax;
int mid=(q[num].left+q[num].right)/2;
if(mid>=t)
return query_max(2*num,s,t);
else if(mid<s)
return query_max(2*num+1,s,t);
else
return max(query_max(2*num,s,mid),query_max(2*num+1,mid+1,t));
} int main()
{
int T,cas=1,d;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&d);
Build(1,1,n);
int ans=0;
for(int i=1;i<=(n-d+1);i++)
{
ans=max(ans,abs(query_max(1,i,i+d-1)-query_min(1,i,i+d-1)));
}
printf("Case %d: %d\n",cas++,ans);
}
return 0;
}
Lightoj1093 【线段树】的更多相关文章
- bzoj3932--可持久化线段树
题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
#44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...
- CF719E(线段树+矩阵快速幂)
题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
随机推荐
- 计算机鼻祖-Donald Knuth(高纳德) 的传奇
李开复说,练内功,不要仅仅花功夫学习各种流行的编程语言和工具,以及一些公司招聘广告上要求的科目.要把数据结构.算法.数据库.操作系统原理.计算机体系结构.计算机网络,离散数学等基础课程学好.最好还是试 ...
- 让EasyDarwin只支持RTP over TCP传输
我们经常需要EasyDarwin服务器支持公网流媒体传输,但很多时候,播放器默认都是通过RTP over UDP的形式在RTSP SETUP中请求,往往都以在内网接收不到UDP数据失败结束,那么我们如 ...
- jQuery 给div绑定单击事件
说明:这篇随笔介绍的是怎么给div添加单击(click)事件.不再废话 直接看代码 <%@ Page Language="C#" AutoEventWireup=" ...
- c# winform中预防窗体重复打开
当窗体以非模态形式打开的时候,有可能出现重复打开的情形,利用以下的代码可以预防重复打开! foreach (Form f in Application.OpenForms) { if (f.Nam ...
- Android 监听返回键退出程序的两种实现
1.Android 双击返回键退出程序 思路:用户按下返回键时设定一个定时器来监控是否2秒内实现了退出,如果用户没有接着按返回键,则清除第一次按返回键的效果,使程序还原到第一次按下返回键之前的状态.定 ...
- xmanager 5图文使用教程
1.Xconfig xconfig是linux下X Window环境中用于配制的一个工具,和menuconfig相似,但用法更友好方便. 当你创建一个会话,会话分配一个默认的配置文件.Xmanager ...
- dtd文件中写的引用实体被xml文件引用后无法在浏览器中显示的问题
解决方案:把dtd文件由被xml文件外部引用改成被xml文件内部引用. 例子: 1.xml文件: <?xml version="1.0" encoding="UTF ...
- hdu 2188 悼念512汶川大地震遇难同胞——选拔志愿者(Bash Game)
题意:从0开始捐款,每次不超过m元,首先达到n元的获胜 思路:等同于从n开始,每次取不超过m,首先达到0的获胜.(Bash Game) #include<iostream> #includ ...
- 重装系统后texstudio拼写检查不工作
重装texstudio还是不行. 后来发现是重装系统后用户名和以前的系统用户明不一样,导致系统盘里的用户文件夹路径不一样.而texstudio的字典存放在用户路径文件夹下 C:\Users\xxx\A ...
- js 分享代码--完整示例代码
<div class="bdsharebuttonbox" data-tag="share_1"> <a class="bds_ms ...