c语言编程*三角形图形右看齐,EOJ 3213 向右看齐
题目描述
N 头奶牛被紧急动员起来了,它们排成了一条长列。从左向右看,排在第 i 个位置的奶牛身高为 Hi。约翰一声令下,所有奶牛向右看齐。假设每头奶牛只能看到比自己高的牛。请问它们各自看到的最近的一头奶牛分别是谁呢?
Input
第一行:单个整数 N,1≤N≤106
第二行到 N+1 行:第 i+1 行有一个整数 Hi,1≤Hi≤106
Output
第一行到第 N 行:第 i 行有一个整数 Ci,表示第 i 头奶牛向右看到的最近的一头奶牛编号,如果看不到任何奶牛,Ci 为 0。
一开始用朴素的循环遍历算法,如果单调递减,复杂度是O(n2),显然是不可行的。
听同学讲解后才知道是单调栈,具体见转载的相关博客。
C语言实现
#include
#define N 100010
int main()
{
int n;scanf("%d",&n);
int h[N],ans[N];
for(int i=; i<=n; i++) scanf("%d",&h[i]);
ans[n]=;
for(int i=n-; i>=; i--)
{
if(h[i]
else if(h[i]==h[i+])ans[i]=ans[i+];
else
{
int j=i;
for(;h[i]>=h[ans[j+]];j++)
if(ans[j+]==) break;
ans[i]=ans[j+];
}
}
for(int i=; i<=n; i++)
printf("%d\n",ans[i]);
}是
细读就可以理解含义,最后一头奶牛向右没有,编号是0,依次向前遍历,对于奶牛i,如果高度低于后一头i+1,那么编号i+1,如果高度相同,后一头能看到的最近的奶牛也必然是i能看到的奶牛,故编号为ans[i+1],当高度高于前一头奶牛,就需要向后遍历直到后面的最高的奶牛。显然,这不是单调栈。(逃
并且在第三种情况下,时间复杂度略高。
以下是单调栈的写法,实现语言C++
#include
#include
#define N 1000001
using namespace std;
int main()
{
stack > s;
int T,tmp;cin>>T;
int ans[N];
for(int m=;m<=T;m++){
cin>>tmp;
if(!s.empty())
while(!s.empty()&&s.top().first
ans[s.top().second]=m;
s.pop();
}
s.push(make_pair(tmp,m));
}
while(!s.empty()){
ans[s.top().second]=;
s.pop();
}
for(int i=;i<=T;i++) cout<< ans[i] <
return ;
}
还用一种更快(一点点)的是额外开一个数组记录读取的数字,stack只需要记录下标,或者反过来,总之原理是一样的。
P2947 [USACO09MAR]向右看齐Look Up--单调栈
单调栈真的很好用呢! P2947 [USACO09MAR]向右看齐Look Up 题目描述 Farmer John's N (1 <= N <= 100,000) cows, conven ...
EOJ Monthly 2019.2 题解(B、D、F)
EOJ Monthly 2019.2 题解(B.D.F) 官方题解:https://acm.ecnu.edu.cn/blog/entry/320/ B. 解题 单测试点时限: 2.0 秒 内存限制: ...
EOJ #276
题面 感觉是个套路题,不是特别难(然而卡常 直接做不可做,改成算每个数的贡献 暴力的想法是容斥,即记录每个数在每行里的出现情况,从总方案中扣掉每一行都没选到这个数的方案,复杂度$O(n^3)$ 我们发 ...
洛谷 P2947 [USACO09MAR]向右看齐Look Up【单调栈】
题目描述 Farmer John's N (1 <= N <= 100,000) cows, conveniently numbered 1..N, are once again stan ...
【洛谷P2947】向右看齐
向右看齐 题目链接 此题可用单调栈O(n)求解 维护一个单调递减栈,元素从左到右入栈 若新加元素大于栈中元素,则栈中元素的仰望对象即为新加元素 每次将小于新加元素的栈中元素弹出,记录下答案 #incl ...
EOJ Problem #3249 状态压缩+循环周期+反向递推
限量供应 Time limit per test: 4.0 seconds Time limit all tests: 4.0 seconds Memory limit: 256 megabytes ...
EOJ Monthly 2018.7
准备继续大学acm啦 又要开始愉快的码码码啦 第一次在华东师大OJ上面做题 看来EOJ上的积分体质是假的,我怎么一把上红??? A.数三角形 神tm的防AK题放在A,出题人很不友好啊... 先写了个暴 ...
EOJ Monthly 2018.4
A. ultmaster 的小迷妹们 Time limit per test: 2.0 seconds Memory limit: 256 megabytes ultmaster 男神和他的小迷妹们准 ...
随机推荐
关于PHP位运算的简单权限设计
写在最前面 最近想写一个简单的关于权限处理的东西,之前我也了解过用二进制数的位运算可以出色地完成这个任务.关于二进制数 的位运算,常见的就是“或.与.非”这三种简单运算了,当然,我也查看了下PHP手册 ...
HDU 4791 Alice&#39;s Print Service(2013长沙区域赛现场赛A题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4791 解题报告:打印店提供打印纸张服务,需要收取费用,输入格式是s1 p1 s2 p2 s3 p3.. ...
Spring源码学习之:模拟实现BeanFactory,从而说明IOC容器的大致原理
spring的IOC容器能够帮我们自动new对象,对象交给spring管之后我们不用自己手动去new对象了.那么它的原理是什么呢?是怎么实现的呢?下面我来简单的模拟一下spring的机制,相信看完之后 ...
Quartz 第五课 SimpleTriggers 官方文档翻译
对于SimpleTrigger你需要知道它的启动总是在一个特殊的时间点或者有你设置的重复时间段中.直白来说,如果你想在2005年1月13日,正好上午11时23分54秒触发,然后执行五次,每十秒钟. 从 ...
2386:Lake Counting-poj
总时间限制: 1000ms 内存限制: 65536kB 描述 Due to recent rains, water has pooled in various places in Farmer J ...
OOAD-设计模式(一)概述
前言 在我们很多时候设计代码都是需要用到各种不一样的设计模式的,接下来着几篇给大家领略一下设计模式.知道设计模式的作用,以及在代码的具体体现.很多时候我们看不懂代码就是因为我们不知道它使用的设计模式. ...
3.2station
题意火车进入,然后要求以最大字典序输出 解题思路:先用一个数组储存当前位置之后最大的数字是什么,然后把已经进站的最后一节火车和还没进站的车的最大值,哪个更大,如果已经进站的更大,那么就先出站,否则就先 ...
搞清Image加载事件(onload)、加载状态(complete)后,实现图片的本地预览,并自适应于父元素内(完成)
onload与complete介绍 complete只是HTMLImageElement对象的一个属性,可以判断图片加载完成,不管图片是不是有缓存:而onload则是这个Image对象的load事件回 ...
check process id exists
kill -0 pid sending the signal 0 to a given PID just checks if any process with the given PID is run ...
poj 1125 Stockbroker Grapevine(最短路径)
Description Stockbrokers are known to overreact to rumours. You have been contracted to develop a me ...
c语言编程*三角形图形右看齐,EOJ 3213 向右看齐相关推荐
- java语言编程三角形图形_编程题:编写程序输入三角形的3条边长,计算并输出... 求助一道JAVA编程题:编写一个类似记事本的图形用......
导航:网站首页 > 编程题:编写程序输入三角形的3条边长,计算并输出... 求助一道JAVA编程题:编写一个类似记事本的图形用... 编程题:编写程序输入三角形的3条边长,计算并输出... 求助 ...
- python编程*三角形图形创意图片_python循环输出三角形图案的例子
我就废话不多说了,直接上代码吧! #Copyright (c)2017, 东北大学软件学院学生 # All rightsreserved #文件名称:a.py #作 者:孔云 #问题描述:编写程序,使 ...
- c语言编程*字母图形,BIT网教c语言练习_编程复习1输出图形
输入图形的行数.以及大写英文字母,输出由字母组成的以下图形. 例如输入:6 W 输出: W W K X X K J Y ...
- C语言编程出图形,C语言画出各种图形
矩形:(里面是空的) ******* * * * * * * ******* Program ended with exit code: 0 for (int i = 0; i ...
- python编程*三角形图形思路_如何使用python制作形状(对角线、倒三角形)?
使用这个起点:size_in = input('Please enter the size: ') size = int(size_in) char = input('Please enter the ...
- c语言编程三角形判定,c语言判定三角形的各种类型——请大家指点
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include void main() { float a,b,c, int san=0; char ch; printf(" ...
- python编程*三角形图形创意图片_使用python的pil制作微信九宫格图片
[Python] 纯文本查看 复制代码#coding=utf-8 import os from PIL import Image import re ''' 使用PIL的Image进行图片裁剪,生成正 ...
- JAVA语言编程练习--图形界面--简易登录界面
1.程序演示: 2.代码: package test07;import java.awt.Color; import java.awt.Dimension; import java.awt.FlowL ...
- JAVA语言编程练习--图形界面+文件输入输出流--实现简单的用户注册登录系统
目录 客户需求: 功能实现: 注意事项: 运行结果: 程序代码: 客户需求: 制作一个注册登录系统,可以把用户名和密码保存在txt文件里.完成登录.注册等功能. 可移植性强,可以嵌入多个桌面小 ...
最新文章
- 下列标识中不是c语言保留字,下列标识符中,不是 C 语言保留字的是
- IO概述(概念分类)
- jsp中引入js文件缓存问题解决
- 08.LoT.UI 前后台通用框架分解系列之——多样的Tag选择器
- CreateThread、_beginthread与AfxBeginThread的区别及其注意事项
- 小鱼易连全系新品正式发布 引爆音视频会议行业核聚变
- sqlilte 判断当天日期_Java8 必会的日期处理的实践,必须收藏!
- Java内存溢出OOM使用Mat分析
- 中值滤波器的matlab实现
- C语言数字雨--90行代码
- 2022软考中级软件设计师---易混淆知识点总结1
- 深蓝学院-多传感器融合定位课程-第4章-点云地图构建及基于地图的定位
- 电脑使用android手机摄像头,电脑怎么使用安卓手机摄像头 电脑使用手机摄像头的方法...
- 开箱即用!使用Rancher 2.3 启用Istio初体验
- 浅谈Unity中的文字显示
- 如何卸载有密码保护的symantec客户端
- 基于matlab的指纹识别程序
- paper_summary
- 场景化AI数据推动智慧家居发展
- 【备忘】IE开发人员工具修复