【t019】window(线段树做法)
Time Limit: 2 second
Memory Limit: 256 MB
【问题描述】
给你一个长度为N 的数组,一个长为K的滑动的窗体从最左移至最右端,你只能见到窗口的K个数,每次窗体向右移动一位,如下表:
Window position Min value Max value
[1 3 -1] -3 5 3 6 7 -1 3
1 [3 -1 -3] 5 3 6 7 -3 3
1 3 [-1 -3 5] 3 6 7 -3 5
1 3 -1 [-3 5 3] 6 7 -3 5
1 3 -1 -3 [5 3 6] 7 3 6
1 3 -1 -3 5 [3 6 7] 3 7
你的任务是找出窗口在各位置时的Max value和Min value。
【输入格式】
第一行N,K,第二行为长度为N的数组
【输出格式】
第一行每个位置的Min value,第二行每个位置的Max value
【输入样例1】
8 3
1 3 -1 -3 5 3 6 7
【输出样例1】
-1 -3 -3 -3 3 3
3 3 5 5 6 7
数据规模
20%:N≤500;50%:N≤100000;100%:N≤1000000;
【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t019
【题解】
线段树(开到3s才过)
【完整代码】
#include <cstdio>
#include <algorithm>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int MAXN = 1e6+100;
int ma[MAXN<<2],mi[MAXN<<2];
int n,k,a[MAXN];
void build(int l,int r,int rt)
{
if (l==r)
{
ma[rt] = mi[rt] = a[l];
return;
}
int m = (l+r)>>1;
build(lson);
build(rson);
ma[rt] = max(ma[rt<<1],ma[rt<<1|1]);
mi[rt] = min(mi[rt<<1],mi[rt<<1|1]);
}
int findma(int L,int R,int l,int r,int rt)
{
if (L <= l && r <= R)
return ma[rt];
int m = (l+r)>>1;
int temp1 = -21e8,temp2 = -21e8;
if (L <= m)
temp1 = findma(L,R,lson);
if (m < R)
temp2 = findma(L,R,rson);
return max(temp1,temp2);
}
int findmi(int L,int R,int l,int r,int rt)
{
if (L <= l && r <= R)
return mi[rt];
int m = (l+r)>>1;
int temp1 = 21e8,temp2 = 21e8;
if (L <= m)
temp1 = findmi(L,R,lson);
if (m < R)
temp2 = findmi(L,R,rson);
return min(temp1,temp2);
}
int main()
{
//freopen("F:\\rush.txt","r",stdin);
scanf("%d%d",&n,&k);
for (int i = 1;i <= n;i++)
scanf("%d",&a[i]);
build(1,n,1);
for (int r = k;r <= n;r++)
{
int l = r-k+1;
printf("%d",findmi(l,r,1,n,1));
if (r==n)
puts("");
else
putchar(' ');
}
for (int r = k;r <= n;r++)
{
int l = r-k+1;
printf("%d",findma(l,r,1,n,1));
if (r==n)
puts("");
else
putchar(' ');
}
return 0;
}
【t019】window(线段树做法)的更多相关文章
- POJ 2823 Sliding Window 线段树区间求和问题
题目链接 线段树区间求和问题,维护一个最大值一个最小值即可,线段树要用C++交才能过. 注意这道题不是求三个数的最大值最小值,是求k个的. 本题数据量较大,不能用N建树,用n建树. 还有一种做法是单调 ...
- 【POJ-2482】Stars in your window 线段树 + 扫描线
Stars in Your Window Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11706 Accepted: ...
- POJ 2482 Stars in Your Window 线段树扫描线
Stars in Your Window Description Fleeting time does not blur my memory of you. Can it really be 4 ...
- POJ 2823 Sliding Window 线段树
http://poj.org/problem?id=2823 出太阳啦~^ ^被子拿去晒了~晚上还要数学建模,刚才躺在床上休息一下就睡着了,哼,还好我强大,没有感冒. 话说今年校运会怎么没下雨!!!说 ...
- POJ 2482 Stars in Your Window 线段树
如果按一般的思路来想,去求窗户能框住的星星,就很难想出来. 如果换一个思路,找出每颗星星能被哪些窗户框住,这题就变得非常简单了. 不妨以每个窗户的中心代表每个窗户,那么每颗星星所对应的窗户的范围即以其 ...
- PKU 2823 Sliding Window(线段树||RMQ||单调队列)
题目大意:原题链接(定长区间求最值) 给定长为n的数组,求出每k个数之间的最小/大值. 解法一:线段树 segtree节点存储区间的最小/大值 Query_min(int p,int l,int r, ...
- POJ 2482 Stars in Your Window (线段树区间合并+扫描线)
这题开始一直被矩形框束缚了,想法一直都是枚举线,但是这样枚举都需要O(n^2)...但是看了别人的思路,感觉这题思想真心很好(PS:开头好浪漫的描述啊,可惜并没有什么用) 题意就是在平面上给你一些星 ...
- HDU2665 kth number 线段树做法
题意:求区间第k小 思路: 线段树 每个节点上保存 当前区间已经排序好的序列 (归并一下就好了嘛 复杂度 O(l)的) 这样建树的时空复杂度都是 O(nlogn)的 对于 每次询问 二分一个答案 在树 ...
- 【BZOJ 1012】 [JSOI2008]最大数maxnumber(线段树做法)
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1012 [题意] [题解] 预开一个20W长度的线段树; 这里a[1..20W]={0} ...
随机推荐
- 【JavaScript】--JavaScript总结一览无余
对于 北风网李炎恢老师的JavaScript的视频也真的是醉了.视频整体来说结构清晰.内容比較简单.JS是一种灵活,开放的语言,语法规则并没有那么的死板.非常easy让人接受. JS的基础部分跟C#类 ...
- Flume Source官网剖析(博主推荐)
不多说,直接上干货! 一切来源于flume官网 http://flume.apache.org/FlumeUserGuide.html Flume Sources Avro Source Thrift ...
- Android Intent的setClass和setClassName的区别
setClass:跳转到与该工程下的(同一个Application中的)activity或者service setClassName:跳转到不同Applicaiton的activity或者servic ...
- [D3] Animate Chart Axis Transitions in D3 v4
When the data being rendered by a chart changes, sometimes it necessitates a change to the scales an ...
- cocos2d-x 3.x游戏开发学习笔记(1)--mac下配置cocos2d-x 3.x开发环境
打开用户文件夹下.bash_profile文件,配置环境 vim ~/.bash_profile //按键i,进行插入编辑(假设输错d进行删除一行) 环境配置过程例如以下: 1.首先配置下androi ...
- JS实现跑马灯效果(鼠标滑入可暂停,离开继续跑)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 2018VMware虚拟机安装Mac OS 10.12.1
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一.下载安装中所需的镜像文件以及补丁工具 Mac OS 10.12.1 Sierra (16B2555) 懒人版(下载地址):ht ...
- Dynamic device virtualization
A system and method for providing dynamic device virtualization is herein disclosed. According to on ...
- JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中
JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中 一.JMS的理解JMS(Java Message Service)是jcp组织02-03年定义了jsr914规范(http://j ...
- Virtualizing physical memory in a virtual machine system
A processor including a virtualization system of the processor with a memory virtualization support ...