LightOJ 1093 - Ghajini 线段树
http://www.lightoj.com/volume_showproblem.php?problem=1093
题意:给定序列,问长度为d的区间最大值和最小值得差最大是多少。
思路:可以使用线段树做,由于固定区间长度,还可以使用单调队列。
/** @Date : 2016-12-06-18.39
* @Author : Lweleth (SoungEarlf@gmail.com)
* @Link : https://github.com/
* @Version :
*/ #include<bits/stdc++.h>
#define LL long long
#define PII pair
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std; const int INF = 0x3f3f3f3f;
const int N = 1e5+20;
const double eps = 1e-8; struct yuu
{
int l, r;
int ma;
int mi;
}tt[N << 2]; int a[N]; void pushup(int p)
{
tt[p].ma = max(tt[p << 1].ma, tt[p << 1 | 1].ma);
tt[p].mi = min(tt[p << 1].mi, tt[p << 1 | 1].mi);
} void build(int l, int r, int p)
{
tt[p].l = l;
tt[p].r = r;
tt[p].ma = 0;
tt[p].mi = INF;
if(l == r)
{
tt[p].ma = tt[p].mi = a[l];
return ;
}
int mid = (l + r) >> 1;
build(l , mid, p << 1);
build(mid + 1, r, p << 1 | 1);
pushup(p);
} void updata(int l, int r, int v, int p)
{
if(l <= tt[p].l && r >= tt[p].r)
{
return ;
}
int mid = (tt[p].l + tt[p].r) >> 1;
if(l <= mid)
updata(l, r, v, p << 1);
if(r > mid)
updata(l, r, v, p << 1 | 1);
pushup(p);
} PII query(int l, int r, int p)//直接返回pair会超时
{
//cout <<tt[p].ma <<"~" <<tt[p].mi << endl;
if(l <= tt[p].l && r >= tt[p].r)
return MP(tt[p].ma, tt[p].mi);
int mid = (tt[p].l + tt[p]. r) >> 1;
PII ans;
ans.fi = 0;
ans.se = INF;
if(l <= mid)
{
ans.fi = max(ans.fi, query(l, r, p << 1).fi);
ans.se = min(ans.se, query(l, r, p << 1).se);
}
if(r > mid)
{
ans.fi = max(ans.fi, query(l, r, p << 1 | 1).fi);
ans.se = min(ans.se, query(l, r, p << 1 | 1).se);
}
return ans;
} int queryma(int l, int r, int p)
{
if(l <= tt[p].l && r >= tt[p].r)
return tt[p].ma;
int mid = (tt[p].l + tt[p].r) >> 1;
int ma = 0;
if(l <= mid)
ma = max(ma, queryma(l, r, p << 1));
if(r > mid)
ma = max(ma, queryma(l, r, p << 1 | 1));
return ma;
} int querymi(int l, int r, int p)
{
if(l <= tt[p].l && r >= tt[p].r)
return tt[p].mi;
int mid = (tt[p].l + tt[p].r) >> 1;
int mi = INF;
if(l <= mid)
mi = min(mi, querymi(l, r, p << 1));
if(r > mid)
mi = min(mi, querymi(l, r, p << 1 | 1));
return mi;
}
int main()
{
int T;
int cnt = 0;
cin >> T;
while(T--)
{
int n, d;
scanf("%d%d", &n, &d);
for(int i = 1; i <= n; i++)
{
scanf("%d", a + i);
}
build(1, n, 1);
//cout << query(2, 3, 1) << endl;
int ma = 0;
for(int i = 1; i + d - 1 <= n; i++)
{
//PII x = query(i, i + d - 1, 1);
ma = max(queryma(i, i + d - 1, 1) - querymi(i, i + d - 1, 1), ma);
//cout << ma <<endl;
}
printf("Case %d: %d\n", ++cnt, ma);
}
return 0;
}
LightOJ 1093 - Ghajini 线段树的更多相关文章
- lightoj 1179(线段树)
传送门:Josephus Problem 题意:经典约瑟夫问题,有n个人,每次数到第k个人出列,求剩下的最后一人. 分析:用线段树模拟约瑟夫问题,记录区间的减少情况,然后根据每次数到的人在区间排第几位 ...
- LightOJ 1089 - Points in Segments (II) 线段树区间修改+离散化
http://www.lightoj.com/volume_showproblem.php?problem=1089 题意:给出许多区间,查询某个点所在的区间个数 思路:线段树,由于给出的是区间,查询 ...
- LightOJ 1097 - Lucky Number 线段树
http://www.lightoj.com/volume_showproblem.php?problem=1097 题意:一个自然数序列,先去掉所有偶数项,在此基础上的序列的第二项为3,则删去所有3 ...
- lightoj 1084 - Winter(dp+二分+线段树or其他数据结构)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1084 题解:不妨设dp[i] 表示考虑到第i个点时最少有几组那么 if a[i ...
- LightOJ 1370 Bi-shoe and Phi-shoe 欧拉函数+线段树
分析:对于每个数,找到欧拉函数值大于它的,且标号最小的,预处理欧拉函数,然后按值建线段树就可以了 #include <iostream> #include <stdio.h> ...
- LightOJ 1135(线段树)
题解引自:http://www.cnblogs.com/wuyiqi/archive/2012/05/27/2520642.html 题意: 有n个数,刚开始都为0 add i , j 给i,j区间内 ...
- LightOJ 1085(树状数组+离散化+DP,线段树)
All Possible Increasing Subsequences Time Limit:3000MS Memory Limit:65536KB 64bit IO Format: ...
- LightOJ 1348 (树链剖分 + 线段树(树状数组))
题目 Link 分析 典型的树链剖分题, 树链剖分学习资料 Code #include <bits/stdc++.h> using namespace std; const int max ...
- Multidimensional Queries(二进制枚举+线段树+Educational Codeforces Round 56 (Rated for Div. 2))
题目链接: https://codeforces.com/contest/1093/problem/G 题目: 题意: 在k维空间中有n个点,每次给你两种操作,一种是将某一个点的坐标改为另一个坐标,一 ...
随机推荐
- Centos6设置DNS
通过编辑 vi /etc/resolv.conf 设置首选DNS和次要DNS.如下,排在前面的就是首选DNS,后面一行就是次要的DNS服务器DNS vi /etc/resolv.conf namese ...
- Python练习—文件
1.随机生成20个两位正整数,将其升序排序后再写入文本文件data_asc.txt中! import random alist = [random.randint(10,100) for i in r ...
- Notes of the scrum meeting(12.11)
meeting time:19:30~20:30p.m.,December 11th,2013 meeting place:3号公寓一层 attendees: 顾育豪 ...
- php5.4以上运行yii框架出现问题的解决方法
Ubuntu Server 下安装 Mcrypt Php Extension http://blog.archean.me/2013/10/22/install-mcrypt-php-extensio ...
- java知乎爬虫
好久没写博客了,前阵子项目忙着上线,现在有点空闲,就把最近写的一个爬虫和大家分享下,统计结果放在了自己买的阿里云服务器上(点此查看效果),效果如下: 程序是在工作之余写的,用了java 的webmgi ...
- 福大软工1816:Alpha(6/10)
Alpha 冲刺 (6/10) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务: 文字/口头描述: 1.组织会议 2.帮助队员解决 ...
- 201621044079 week13 网络
作业13-网络 1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以 ...
- 编译android6.0错误recipe for target 'out/host/linux-x86/obj/lib/libart.so' failed
转自:http://blog.csdn.net/ztguang/article/details/52856076 trip: libpagemap_32 (out/target/product/xx/ ...
- New API
New API Producer >增加发送回调 >重构Partition 统一High Level API与Low Level API >从kafka.consumer和kafka ...
- pyHeatMap生成热力图
库链接:https://pypi.org/project/pyheatmap/ 现在的linux系统默认都是安装好的py环境,直接用pip进行热力库安装 pip install pyheatmap 或 ...