【luogu P2947 [USACO09MAR]向右看齐Look Up】 题解
题目链接:https://www.luogu.org/problemnew/show/P2947
因为在单调队列上被dalao们锤爆
怒刷单调队列题
何为单调队列?
设我们的队列为从左至右单调递增
对于样例数据 3 2 6 1 1 2
我们先把3入队 此时队列:3
再将2从后面入队 此时队列:2 3
再将6从后面入队 但是,为了满足队列从左至右的单调性,我们将2,3出队 此时队列:6
再将1从后面入队 此时队列:1 6
再将1从后面入队 此时队列:1 1 6
再将2从后面入队 但是,为了满足队列从左至右的单调性,我们将1,1出队 此时队列:2 6
由此可以类推其他单调性。
于是,我们观察到单调队列和这道题的关系:
“谁把我从队列里赶了出去我就仰望谁。”
所以,2,3被6赶出去,2,3仰望的位置为6的位置即3。
所以,1,1被2赶出去,1,1仰望的位置为2的位置即6。
那么,如果我一直在队里。我就谁也不仰望。
下面介绍实现方式:
我先说:
"我永远都喜欢\(Stella\)!"
没良心的Master
单调队列需要一个支持从两边操作的队列——双端队列
\(STL\)中有现成的deque:
\(code:\)
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 100000 + 10;
struct node{
int pos, val;
}a[maxn];//因为我们需要记录位置,所以开一个结构体。val为高度,pos为在序列的位置。
int n, ans[maxn];
deque<node> q;//双端队列。
int main()
{
scanf("%d",&n);
for(int i = 1; i <= n; i++)
{
scanf("%d",&a[i].val); a[i].pos = i;//输入高度,给位置赋值。
while(!q.empty() && a[i].val > q.back().val) ans[q.back().pos] = a[i].pos, q.pop_back();//当队列不为空时,如果当前输入的值大于我队列中后面的元素值,那么我就要仰望当前的输入值的位置。同时把我出队。
q.push_back(a[i]);//从后面将元素入队。
}
for(int i = 1; i <= n; i++)
printf("%d\n",ans[i]);
return 0;
}
至于为什么需要一个支持两头操作的队列。
在大部分单调队列题目中,需要维护的区间有时并不是整一个区间,而是多个区间。所以当如果我们单调队列中最前面的数已经不在当前区间里,我们需要将他从前面出队。
最前面的数一定比当前维护好的队列里所有数入队都早。如果他入队不是最早还比之前入队的数大,前面入队的数直接被他挤出队了。
欢迎交流/指错
一起共同进步。
QQ:935145183/3203600070
【luogu P2947 [USACO09MAR]向右看齐Look Up】 题解的更多相关文章
- luogu P2947 [USACO09MAR]向右看齐Look Up |单调队列
题目描述 Farmer John's N (1 <= N <= 100,000) cows, conveniently numbered 1..N, are once again stan ...
- P2947 [USACO09MAR]向右看齐Look Up--单调栈
单调栈真的很好用呢! P2947 [USACO09MAR]向右看齐Look Up 题目描述 Farmer John's N (1 <= N <= 100,000) cows, conven ...
- 洛谷 P2947 [USACO09MAR]向右看齐Look Up【单调栈】
题目描述 Farmer John's N (1 <= N <= 100,000) cows, conveniently numbered 1..N, are once again stan ...
- 洛谷 P2947 [USACO09MAR]向右看齐Look Up
目录 题目 思路 \(Code\) 题目 戳 思路 单调栈裸题 \(Code\) #include<stack> #include<cstdio> #include<st ...
- 洛谷P2947 [USACO09MAR]向右看齐Look Up
#include<cstdio> #include<algorithm> #include<stack> #include<cctype> using ...
- 洛谷P2947 [USACO09MAR]仰望Look Up
P2947 [USACO09MAR]仰望Look Up 74通过 122提交 题目提供者洛谷OnlineJudge 标签USACO2009云端 难度普及/提高- 时空限制1s / 128MB 提交 ...
- [USACO09MAR]向右看齐Look Up(单调栈、在线处理)
https://www.luogu.org/problem/P2947 题目描述 Farmer John's N (1 <= N <= 100,000) cows, convenientl ...
- 【luogu P1955 [NOI2015]程序自动分析】 题解
题目链接:https://www.luogu.org/problemnew/show/P1955 并查集操作,1e9要离散化,数组要开大一些,操作前先执行合并操作 样例好毒啊(全是排好序的) #inc ...
- 【luogu P2195 HXY造公园】 题解
题目链接:https://www.luogu.org/problemnew/show/P2195 fir.吐槽题目(省略1w字 sec.考虑对一个森林的维护,每棵树用并查集维护. 操作1:输出当前查询 ...
随机推荐
- docker 摘要(入门版)
Docker 安装 macOS或者windows 下载boot2docker工具 CentOS yum install docker-io -y systemctl start docker dock ...
- dpkg: error: dpkg status database is locked by another process 解决方法
使用dpkg -i/apt命令安装,报错: ------------------------------------------------------------- dpkg: error: dpk ...
- 详解 UWP (通用 Windows 平台) 中的两种 HttpClient API
UWP (通用 Windows 平台) 应用开发者在构建通过 HTTP 与 Web 服务或服务器断点交互的应用时,有多种 API 可以选择.要在一个托管 UWP 应用中实现 HTTP 客户端角色,最常 ...
- 监控节点 xml写入数据库 存储过程
USE [Appserver] GO /****** Object: StoredProcedure [AppServer].[ImportNodeRelationData] Script D ...
- Android界面编程--使用活动条(ActionBar)--实现Tab导航
使用ActionBar结合fragment实现导航 1,调用ActionBar的setNavigationModel(ActionBar.NAVIGATION_MODE_TABS)设置使用tabs导航 ...
- JS && || 陷阱 javascript 逻辑与、逻辑或 【转】
通常来说逻辑运算a&&b和a||b分别是逻辑与运算和逻辑或运算,返回的是一个布尔值,要么为true,要么为false. 比如在PHP里面a&&b返回类型永远是布尔值,非 ...
- Xcode10 闪退问题
最新更新了iOS12,mac10.13.6,xcode10之后,打开之前的项目,只要进行import,xcode就会闪退.那么就来看一下解决方案: Xcode10 新增了一个构建系统起名“New Bu ...
- jqueryUI学习
01.选项卡 拖动按钮<div id="tabs"> <ul> <li><a href="#tabs-1">第一 ...
- Java开发坏境配置
在"系统变量"中设置3项属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓),若已存在则点击"编辑",不存在则点击"新建" ...
- learn OpenStack by picture