caioj 1172 poj 2823 单调队列过渡题
给定一个n个数的数列,从左至右输出每个长度为m的数列段内的最大数。
输入:第一行两个整数n和m( 1<= n <= 20 0000,m<=n)。下来给出n个整数。
输出:一行一个整数,表示每连续m个数的最大值。
样例输入:
8 3
1 3 -1 -3 5 3 6 7
样例输出:
3
3
5
5
6
7
维护一个单调队列,列内严格递减。若是首端元素已经脱离当前M个元素的区间,则去除。若是新元素比队尾元素严格小,直接入队,否则元素出队至合格后,新元素入队。比较模板了:
#include <bits/stdc++.h>
using namespace std; #define ll long long
#define pii pair<int,int>
#define rep(i,a,b) for(int i=(a);i<(b);++i)
#define pb push_back
#define fi first
#define se second const double eps=1e-, PI=acos(-1.0f);
const int inf=0x3f3f3f3f;
const int maxN=2e5+;
int N, M, K, T;
int g[maxN];
deque<pii> dq; int main() {
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
#endif
scanf("%d%d", &N, &M);
for (int i = ; i <= N; ++i)
scanf("%d", &g[i]);
for (int i = ; i <= N; ++i) {
while (dq.size() && dq.back().fi <= g[i])
dq.pop_back();
dq.push_back(pii(g[i], i));
while (dq.back().se - dq.front().se + > M)
dq.pop_front();
if (i >= M)
printf("%d\n", dq.front().fi);
}
return ;
}
用数组实现deque,得交c++,G++会TLE
#include <stdio.h>
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define maxN 1000005
int n, k, t, ab[maxN], as[maxN];
int lb, rb, ls, rs;
struct node{int v, i;} a, B[maxN], S[maxN]; int main () {
//freopen("data.in", "r", stdin);
scanf("%d%d", &n, &k);
lb = rb = ls = rs = ;
FOR(i, , n) {
scanf("%d", &a.v), a.i = i;
while (ls < rs && S[rs - ].v >= a.v) rs--;
S[rs++] = a;
if (S[ls].i <= i - k) ++ls;
if (i >= k) ab[i] = S[ls].v; while (lb < rb && B[rb - ].v <= a.v) rb--;
B[rb++] = a;
if (B[lb].i <= i - k) ++lb;
if (i >= k) as[i] = B[lb].v;
}
FOR(i, k, n) printf(i == k ? "" : " "), printf("%d", ab[i]);
puts("");
FOR(i, k, n) printf(i == k ? "" : " "), printf("%d", as[i]);
return ;
}
caioj 1172 poj 2823 单调队列过渡题的更多相关文章
- Sliding Window POJ - 2823 单调队列模板题
Sliding Window POJ - 2823 单调队列模板题 题意 给出一个数列 并且给出一个数m 问每个连续的m中的最小\最大值是多少,并输出 思路 使用单调队列来写,拿最小值来举例 要求区间 ...
- poj 2823单调队列模板题
#include<stdio.h>//每次要吧生命值长的加入,吧生命用光的舍弃 #define N 1100000 int getmin[N],getmax[N],num[N],n,k, ...
- POJ 2823 单调队列入门水题
最最基础的单调队列题目.一个单增一个单减.还是可以借此好好理解一下单调队列的. #include <stdio.h> #include <string.h> #include ...
- poj 2823 单调队列
思路:裸的单调队列. #include<iostream> #include<cstring> #include<cstdio> #include<algor ...
- POJ 2823 Sliding Window (模板题)【单调队列】
<题目链接> <转载于>>> > 题目大意: 给你一段序列和一个长为k的窗口,这个窗口从最左边逐渐向右滑,直到滑到最右边,问你,该窗口在滑动的过程中,最大值和 ...
- luoguP1886 滑动窗口(单调队列模板题)
题目链接:https://www.luogu.org/problem/P1886#submit 题意:给定n个数,求大小为k的滑动窗口中最小值和最大值. 思路:单调队列模板题. AC代码: #incl ...
- POJ 2823 Sliding Window(单调队列入门题)
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 67218 Accepted: 190 ...
- POJ 2838 单调队列
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 55309 Accepted: 15911 ...
- 刷题向》POJ2823 单调队列裸题(<不会做,请自裁>系列)
最近BZOJ炸了,而我的博客上又更新了一些基本知识,所以这里刷一些裸题,用以丰富知识性博客 POJ2823 滑动的窗口 这是一道经典的单调队题,我记得我刚学的时候就是用这道题作为单调队列的例题,算 ...
随机推荐
- RxJS - Subject(转)
Observer Pattern 观察者模式定义 观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态 ...
- 【转】关于JTA,XA,ACID
对于我们这种初学者,可能会使用spring带给我们的@Transactional,可能了解JTA,可能会使用jotm.atomikos,又会遇到一些名词XA,支持XA的数据库驱动等等诸多问题,然后就会 ...
- nginx 错误日志分析
502 1.查看nginx错误日志 tailf /data/log/nginx/error.log // :: [error] #: * recv() failed (: Connection res ...
- logback和slf4j的使用之logger使用
原文:https://blog.csdn.net/cw_hello1/article/details/51923814 一.logger标签描述:(了解logger标签之前先看看两个重要概念) 1.主 ...
- BZOJ3524: [Poi2014]Couriers(主席树)
题意 题目链接 Sol 严格众数只会出现一次,那么建出主席树,维护子树siz,直接在树上二分即可 #include<bits/stdc++.h> #define LL long long ...
- 慕课网 javascript深入浅出编程练习
任务 请在index.html文件中,编写arraysSimilar函数,实现判断传入的两个数组是否相似.具体需求: 1. 数组中的成员类型相同,顺序可以不同.例如[1, true] 与 [false ...
- url override and HttpSession implements session
背景 HttpSession默认使用Cookie存储Session ID,如果在用户禁用浏览器Cookie的功能后,仍打算运用HttpSession来进行会话管理,那么可以搭配URL重写来实现. 实现 ...
- idea 忽略显示文件
最后填写的时候,参考原有参数,1.在末尾加分号2.形式为*.xxx
- Django html标签make_safe
from django.utils.safestring import mark_safe a = mark_safe("<a href='#'>test</a>&q ...
- JVM知识(四):GC配置参数
JVM配置参数分为三类参数:跟踪参数.堆分配参数.栈分配参数 这三类参数分别用于跟踪监控JVM状态,分配堆内存以及分配栈内存. 跟踪参数 跟踪参数用户跟踪监控JVM,往往被开发人员用于JVM调优以及故 ...