POJ 2823 Sliding Window 线段树区间求和问题
线段树区间求和问题,维护一个最大值一个最小值即可,线段树要用C++交才能过。
注意这道题不是求三个数的最大值最小值,是求k个的。
本题数据量较大,不能用N建树,用n建树。
还有一种做法是单调队列,耗时更少。
- #include <iostream>
- #include <cstdio>
- #include <cmath>
- #include <cstring>
- #include <algorithm>
- #define N 1000005
- using namespace std;
- int n,k;
- struct Tree
- {
- int l,r,mx,mn;
- }tree[N*];
- void build(int root,int l,int r)
- {
- tree[root].l=l;
- tree[root].r=r;
- if(l==r)
- {
- scanf("%d",&tree[root].mx);
- tree[root].mn=tree[root].mx;
- return;
- }
- int mid=(l+r)>>;
- build(root<<,l,mid);
- build(root<<|,mid+,r);
- tree[root].mx=max(tree[root<<].mx,tree[root<<|].mx);
- tree[root].mn=min(tree[root<<].mn,tree[root<<|].mn);
- }
- int querymx(int root,int l,int r)
- {
- if(l<=tree[root].l&&r>=tree[root].r) return tree[root].mx;
- int mid=(tree[root].l+tree[root].r)>>,ret=-;
- if(l<=mid) ret=max(querymx(root<<,l,r),ret);
- if(r>mid) ret=max(querymx(root<<|,l,r),ret);
- return ret;
- }
- int querymn(int root,int l,int r)
- {
- if(l<=tree[root].l&&r>=tree[root].r) return tree[root].mn;
- int mid=(tree[root].l+tree[root].r)>>,ret=;
- if(l<=mid) ret=min(querymn(root<<,l,r),ret);
- if(r>mid) ret=min(querymn(root<<|,l,r),ret);
- return ret;
- }
- void pr()
- {
- for(int i=;i<=n-k+;i++)
- printf("%d ",querymn(,i,i+k-));
- puts("");
- for(int i=;i<=n-k+;i++)
- printf("%d ",querymx(,i,i+k-));
- puts("");
- }
- int main()
- {
- while(scanf("%d%d",&n,&k)!=EOF)
- {
- build(,,n);
- pr();
- }
- return ;
- }
POJ 2823 Sliding Window 线段树区间求和问题的更多相关文章
- POJ 2823 Sliding Window 线段树
http://poj.org/problem?id=2823 出太阳啦~^ ^被子拿去晒了~晚上还要数学建模,刚才躺在床上休息一下就睡着了,哼,还好我强大,没有感冒. 话说今年校运会怎么没下雨!!!说 ...
- 洛谷P1886 滑动窗口(POJ.2823 Sliding Window)(区间最值)
To 洛谷.1886 滑动窗口 To POJ.2823 Sliding Window 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每 ...
- PKU 2823 Sliding Window(线段树||RMQ||单调队列)
题目大意:原题链接(定长区间求最值) 给定长为n的数组,求出每k个数之间的最小/大值. 解法一:线段树 segtree节点存储区间的最小/大值 Query_min(int p,int l,int r, ...
- POJ 2823 Sliding Window 题解
POJ 2823 Sliding Window 题解 Description An array of size n ≤ 106 is given to you. There is a sliding ...
- POJ 2823 Sliding Window + 单调队列
一.概念介绍 1. 双端队列 双端队列是一种线性表,是一种特殊的队列,遵守先进先出的原则.双端队列支持以下4种操作: (1) 从队首删除 (2) 从队尾删除 (3) 从队尾插入 (4) ...
- POJ 2482 Stars in Your Window (线段树区间合并+扫描线)
这题开始一直被矩形框束缚了,想法一直都是枚举线,但是这样枚举都需要O(n^2)...但是看了别人的思路,感觉这题思想真心很好(PS:开头好浪漫的描述啊,可惜并没有什么用) 题意就是在平面上给你一些星 ...
- POJ3468(线段树区间求和+区间查询)
https://vjudge.net/contest/66989#problem/C You have N integers, A1, A2, ... , AN. You need to deal w ...
- Poj 3667——hotel——————【线段树区间合并】
Hotel Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 13124 Accepted: 5664 Descriptio ...
- POJ 2823 Sliding Window (线段树/单调队列)
题目不说了,可以用线段树或者单调队列,下面附上代码. 线段树: #include <iostream> #include <stdio.h> #include <algo ...
随机推荐
- HTML 字符实体 < >: &等
在 HTML 中,某些字符是预留的. 在 HTML 中不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签. 如果希望正确地显示预留字符,我们必须在 HTML 源代码中使用 ...
- Git中如何利用生成SSH个人公钥访问git仓库
Git中如何利用生成SSH个人公钥访问git仓库方法(这里以coding平台为例): 1. 获取 SSH 协议地址 在项目的代码页面点击 SSH 切换到 SSH 协议, 获得访问地址, 请使用这个地址 ...
- Linux CentOS6.x ip设置(网卡设置)
修改IP永久生效按以下方法vi /etc/sysconfig/network-scripts/ifcfg-eth0(eth0,第一块网卡,如果是第二块则为eth1)按如下修改ip: DEVICE=et ...
- Android源码——AsynTask
AsyncTask<Params, Progress, Result>中三个参数为: Params 输入数据 Progress 过程数据 Result ...
- Zabbix客户端安装
CentOS 7 [root@localhost /]# rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3 ...
- linux下配置yun源
备份原yum源 /etc/yum.repos.d/centos一base.repo 下载yum源 wagt 源网址/源名称/etc/yum.repos.d/原yum名
- HTML5学习总结-番外04 Cordova/PhoneGap
一 PhoneGap 1 PhoneGap简绍 http://www.cnblogs.com/JustRun1983/p/3819433.html 2 环境安装 http://cordova.apac ...
- MVC POST在ACTION上进行多个模型的数据绑定
首先声明,接下来的东西并不符合本人认同的严谨的MVC模式. 用MVC做项目的过程中,越来越多的用到不严谨的MVC编程. 比如,在"cshtml"文件中写: @Html.Raw(DB ...
- 美团HD(4)-二级联动效果
DJNavDropView.m #import "DJNavDropView.h" #import "DJCategory.h" #import "D ...
- KALI Linux problems & Study Red Hat | Ubuntu
Problem When you ask some website with https head.you may met the problem secure connection failed ...