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的更多相关文章
随机推荐
- FxCop
下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=8279 FxCop是一个代码分析工具,和StyleCop(代码规范)一起配合 ...
- verilog中的task用法
任务就是一段封装在“task-endtask”之间的程序.任务是通过调用来执行的,而且只有在调用时才执行,如果定义了任务,但是在整个过程中都没有调用它,那么这个任务是不会执行的.调用某个任务时可能需要 ...
- Atom编辑器入门到精通(五) Git支持
版本控制对于开发来说非常重要,Atom当然也提供了很好的支持,本文将介绍如何在Atom中集成使用Git和GitHub 恢复文件 当你修改了某个文件,然后发现改得不满意,希望恢复文件到最后一次提交的状态 ...
- java Spring bean作用域
1. Singleton作用域 当一个bean的作用域为singleton, 那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则 ...
- asterisk webrtc使用SIPML5初体验
一直尝试,web呼叫xlite终端没有,主要是配置问题: 其中sip.conf配置如下: [general] context=public ; Default context for incoming ...
- Repositories.EntityFramework 实现方式
今天记录一下自己的EntityFramework数据访问层.这里用通过泛型Repository的方式实现了数据的访问.先上一张结构图. Configuration文件夹里面的类是全部实体映射类.这些类 ...
- 20160331javaweb 之JSP page 指令
- Objective-c单例模式详解
转载自:http://www.jianshu.com/p/85618bcd4fee 单例模式出现以后,关于它的争执就一直存在.在开发项目中,有很多时候我们需要一个全局的对象,而且要保证全局有且仅有一份 ...
- 关于layoutSubviews以及drawRect方法
首先两个方法都是异步执行.layoutSubviews方便数据计算,drawRect方便视图重绘. layoutSubviews在以下情况下会被调用: 1.init初始化不会触发layoutSubvi ...
- Angular2中的host
要将Angular组件渲染成DOM中的某种东西,你需要在Angular组件中结合一个DOM元素,我们称这些叫host元素. 一个组件可以用以下方式于其host DOM元素进行交互 它可以监听其事件. ...