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 ...
随机推荐
- jni集成第3方third party动态库libwebrtc_audio_preprocessing.so时android.mk的编写
现在要调用一个第3方库libwebrtc_audio_preprocessing.so 最终布局如下: 即创建2个文件夹,将第3方库放进去. include目录放第3方库的头文件 其中lib目录如下 ...
- n&(n-1)的妙用
今天无聊拿起<编程之美>看了下,发现原来n&(n-1)还有很多妙用.n&(n-1)作用:将n的二进制表示中的最低位为1的改为0,先看一个简单的例子:n = 10100(二进 ...
- Operation not permitted - /usr/bin/pod
问题描述:执行sudo gem install cocoapods, 提示出错:While executing gem ... (Errno::EPERM) Operation not per ...
- leetcode题目解答报告(1)
Remove Element 题目: Given an array and a value, remove all instances of that value in place and retur ...
- Delphi的RTTI(许多参考链接)
RTTI(RunTime Type Information): 运行时类型信息, 就是在程序运行后也能得到类型(譬如 TButton 类)的信息. 这在早期主要用于 IDE 设计时, 譬如把一个 Bu ...
- ubuntu下配置rails环境遇到的错误
1.Could not find gem 'sqlite3 (>= 0)' in any of the gem sources listed in your Gemfile 解决:sudo ge ...
- WIN7系统设置wifi
*&->20170302 112700 WIN7系统设置wifi, 开启win7的隐藏功能,即虚拟wifi功能和虚拟无线AP功能,即可实现将电脑变成wifi 供无线上网, 1.开始-命令 ...
- Android项目中JNI技术生成并调用.so动态库实现详解
生成 jni方式有两种:一种是通过SWIG从C++代码生成过度的java代码:另一种是通过javah的方式从java代码自动生成过度的C++代码.两种方式下的步骤流程正好相反. 第一种方式:由于需要配 ...
- CSU - 1550 Simple String —— 字符串
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1550 题解: 1.A+B 与C的交集必须>=n 2.A与C的交集必须>= ...
- hdu 1753 大明A+B(大数)
题意:小数大数加法 思路:大数模板 #include<iostream> #include<stdio.h> #include<string.h> using na ...