D - Laying Cables Gym - 100971D (单调栈)
题目链接:https://cn.vjudge.net/problem/Gym-100971D
题目大意:给你n个城市的信息,每一个城市的信息包括坐标和人数,然后让你找每一个城市的父亲,作为一个城市的父亲具体满足的条件是:作为父亲的城市的坐标和当前城市的人数最多,,如果有多个满足的城市,则和原来的点相隔最近的作为父亲。
具体思路:首先,题目中说坐标和人数是不会有相同的值,所以我们对于每一个点,按照x轴进行排序之后,找出当前点的左边的第一个人数大于当前点的,然后再找出当前点的右边的第一个人数大于当前点的,这个过程可以通过单调栈来维护,然后再具体找的过程中,先看当前的这个点的左边和右边时候都存在,如果都没有,就证明没有父亲,如果有一个,这个点就是父亲,如果都有的话,就是寻找相隔最近的就可以了。
AC代码:
#include<iostream>
#include<stack>
#include<cmath>
#include<stdio.h>
#include<algorithm>
#include<stack>
#include<string>
using namespace std;
# define ll long long
const int maxn = 2e5+;
int L[maxn],R[maxn];
int val[maxn],x[maxn];
int pos[maxn],ans[maxn];
bool cmp(int t1,int t2){
return x[t1]<x[t2];
}
int main(){
int n;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d %d",&x[i],&val[i]);
pos[i]=i;
}
sort(pos+,pos+n+,cmp);
stack<int>q;
for(int i=;i<=n;i++){
if(!q.empty())L[pos[i]]=-;
while(!q.empty()&&val[q.top()]<=val[pos[i]])q.pop();
if(q.empty())L[pos[i]]=-;
else L[pos[i]]=q.top();
q.push(pos[i]);
}
while(!q.empty())q.pop();
for(int i=n;i>=;i--){
if(!q.empty())R[pos[i]]=-;
while(!q.empty()&&val[q.top()]<=val[pos[i]])q.pop();
if(q.empty())R[pos[i]]=-;
else R[pos[i]]=q.top();
q.push(pos[i]);
}
for(int i=;i<=n;i++){
if(L[i]==-&&R[i]==-)ans[i]=-;
else if(L[i]==-)ans[i]=R[i];
else if(R[i]==-)ans[i]=L[i];
else {
if(abs(x[R[i]]-x[i])>abs(x[L[i]]-x[i]))ans[i]=L[i];
else if(abs(x[R[i]]-x[i])<abs(x[L[i]]-x[i]))ans[i]=R[i];
else {
if(val[R[i]]>val[L[i]])ans[i]=R[i];
else ans[i]=L[i];
}
}
}
for(int i=;i<=n;i++){
if(i==)printf("%d",ans[i]);
else printf(" %d",ans[i]);
}
printf("\n");
return ;
}
D - Laying Cables Gym - 100971D (单调栈)的更多相关文章
- Gym 100971D 单调栈
D - Laying Cables Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u ...
- Gym 101102D---Rectangles(单调栈)
题目链接 http://codeforces.com/gym/101102/problem/D problem description Given an R×C grid with each cel ...
- Gym - 101334F 单调栈
当时我的第一想法也是用单调栈,但是被我写炸了:我也不知道错在哪里: 看了大神的写法,用数组模拟的: 记录下单调递增栈的下标,以及每个数字作为最小值的最左边的位置. 当有数据要出栈的时候,说明栈里的数据 ...
- Code Forces Gym 100971D Laying Cables(单调栈)
D - Laying Cables Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u ...
- Gym 100971D Laying Cables 单调栈
Description One-dimensional country has n cities, the i-th of which is located at the point xi and h ...
- Gym 100971D Laying Cables 二分 || 单调栈
要求找出每个a[i],找到离他最近而且权值比它大的点,若距离相同,输出权利最大的那个 我的做法有点复杂,时间也要500+ms,因为只要时间花在了map上. 具体思路是模拟一颗树的建立过程,对于权值最大 ...
- Codeforces gym 100971 D. Laying Cables 单调栈
D. Laying Cables time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- Gym - 102028H Can You Solve the Harder Problem? (后缀数组+RMQ+单调栈)
题意:求一个序列中本质不同的连续子序列的最大值之和. 由于要求“本质不同”,所以后缀数组就派上用场了,可以从小到大枚举每个后缀,对于每个sa[i],从sa[i]+ht[i]开始枚举(ht[0]=0), ...
- Gym - 101102D Rectangles (单调栈)
Given an R×C grid with each cell containing an integer, find the number of subrectangles in this gri ...
随机推荐
- 一本通1548【例 2】A Simple Problem with Integers
1548:[例 2]A Simple Problem with Integers 题目描述 这是一道模板题. 给定数列 a[1],a[2],…,a[n],你需要依次进行 q 个操作,操作有两类: 1 ...
- Gitblit 的安装使用
1.下载gitblit,可以网上下载,也可以在下面云盘链接取 gitblit-1.8.0 下载链接:https://pan.baidu.com/s/1x7dnbyDp1FmYjMosJbGR8w 密 ...
- instanceof判断的对象可以是接口
instanceof是Java的一个二元操作符(运算符) 用法 boolean result = object instanceof class instanceof通过返回一个布尔值来指出,这个对象 ...
- 冬令营前的一些计划&记录
冬令营前的一些计划&记录 计划 yyb发现自己很多以前学过的东西完完全全不记得了,所以在接下来的时间里可能会留下多篇复习向的博客,当然也可能因为觉得没有必要复习而到处乱做题. 现在先大概归类一 ...
- DHCP的原理和实现过程
在DHCP过程中有两个对象DHCP客户端和DHCP服务端,而且DHCP在三层是通过可靠地TCP协议实现,DHCP服务运行在67和68端口. DHCP实现的简单过程,如图1所示, 图1 文字描述: 1. ...
- 【ARC063E】Integers on a tree
Description 给定一棵\(n\)个点的树,其中若干个点的权值已经给出.现在请为剩余点填入一个值,使得相邻两个点的差的绝对值恰好为1.请判断能否实现,如果能,请将方案一并输出. Solutio ...
- NHibernate使用简单示例
NHibernate使用小示例 1.新建Model类库项目. 使用代码生成器生成Model类. 此处以简单的UserInfo表作为示例. 注意字段前必须以 virtual 修饰. namespace ...
- PHP去调用jenkins
背景说明:目前公司用到 jenkins(持续集成开源工具)更多情况下,通过配置,可以在gitlab上通过webhooks去调度jenkins 或者通过 jenkins管理后台,去手动执行“立即构建”去 ...
- 谨记:new Date()在IOS中的坑
第一次遇到,记录一下 要创建一个指定时间的new Date对象时,通常的做法是: new Date("2018-04-27 11:11");然后就可以根据这个获取年月日等信息 这种 ...
- Docker从入门到飞升:基础配置安装
导读 Docker近几年非常火,因为它是容器虚拟化,更能够充分提高硬件资源的使用率.其实利用率高不算什么,它最大的优势是能给让运维人员或者开发人员快速部署和交付资源,大大提高了工作效率.几乎所有的大企 ...