CF_91B
题目意思是这样的:给定n个整数,求第i个数右边的距离它最远的比它小的数的下标之差然后再减1。
这里既然是需要知道距离该数最远的下标,可以从右至左扫描一遍,然后按照单调递减的顺序入栈,即只把比栈顶元素小的整数入栈,等于或大于对于后面的数查找比自己小的值没什么意义。然后遇到比栈顶元素大,而又比不大于栈底元素的情况二分搜索就可以了。
#include<stdio.h>
#define N 100010
int a[N],ans[N],stack[N];
int main(void)
{
int n,i,top=;
scanf("%d",&n);
for(i=; i<n; i++)
scanf("%d",&a[i]);
for(i=n-; i>=; i--)
{
if(!top||a[i]<=a[stack[top]])
{
ans[i]=-;
if(a[i]!=a[stack[top]])//小于栈顶元素或栈为空时入栈
stack[++top]=i;
}
else
{
if(a[i]>a[stack[]])
ans[i]=stack[]-i-;
else
{
int l,r,mid;
for(l=,r=top,mid=((l+r)>>); (mid=(l+r)>>),r-l>; a[stack[mid]]<a[i]?(r=mid):(l=mid))//记得(r=mid)这里括号不能少,不然无法编译通过
;
ans[i]=stack[r]-i-;
}
}
}
for(i=; i<n; i++) printf("%d%c",ans[i],i==n-?'\n':' ');
return ;
}
CF_91B的更多相关文章
随机推荐
- 如何搭建javaweb 开发环境
一.准备工作: (1) 环境要求: 1.java jdk 2.eclipse--j2ee版 3.tomcat 4.mysql 5.HeidiSQL_7.0 (2)搭建步骤: 1.安装JDK,配置环境变 ...
- java中对除法取2位小数的一点试验
如下程序, double a = 12.3333333,b = 11.22222222222; double c = 0; String d = String.format("%.2f&qu ...
- NFC标签
2.4 NFC标签 NFC标签(以下也称tag)是一种带有NFC电路和天线的钱币大小的电子标签,见图2.1,小容量的标签售价约1元左右一枚. 基本标签类型有四种,以1至4来标识,各有不同的格式与容量. ...
- 今天是程序员节(Programmer‘s Day)
http://blog.jobbole.com/47787/ 我只想知道他们到底在说神马???
- 学习笔记_Java_day13_JSP三大指令()
JSP指令 1 JSP指令概述 JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的. JSP ...
- Apache+Tomcat +mod_proxy集群负载均衡及session
序言: 在玩Apache+Tomcat +mod_jk集群负载均衡及session的时候发现,还有一种方式可以实现,就是网上各位大牛们说的mod_proxy反向代理. 实在弄的我的知识细胞洋洋.实 ...
- O-C相关-08-动态类型与静态类型
08-动态类型与静态类型 1, 什么是动态类型和静态类型 1) 动态语言 又叫动态编程语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.比如众所周知的EC ...
- Spring中Bean实例的生命周期及其行为
- html页面布局 第8节
页面布局: <html> <head> <title>页面布局</title> <style type="text/css"& ...
- ubuntu下编译安装apache
官网http://httpd.apache.org/download.cgi下载apache源码包后 /*解包*/ gzip -d httpd-2_x_NN.tar.gz tar -xf httpd- ...