线段树求后继+环——cf1237D
/*
首先开三倍消环(两倍是不够的),倒序求值,线段树找一下后继即可
*/
#include<bits/stdc++.h>
using namespace std;
#define N 300005 int n,a[N],ans[N]; #define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int Max[N<<],Min[N<<],pos1,pos2;
void build(int l,int r,int rt){
Max[rt]=;Min[rt]=1e9+;
if(l==r){
Max[rt]=Min[rt]=a[l];
return;
}
int m=l+r>>;
build(lson);build(rson);
Max[rt]=max(Max[rt<<],Max[rt<<|]);
Min[rt]=min(Min[rt<<],Min[rt<<|]);
}
void query1(int L,int R,int v,int l,int r,int rt){//找第一个比v大的后继
if(l==r){
if(Max[rt]>v)pos1=min(pos1,l);
return;
}
int m=l+r>>;
if(L<=l && R>=r){//可以在区间里二分了
if(Max[rt<<]>v)
query1(L,R,v,lson);
else if(Max[rt<<|]>v)
query1(L,R,v,rson);
return;
}
if(L<=m)query1(L,R,v,lson);
if(R>m)query1(L,R,v,rson);
}
void query2(int L,int R,double v,int l,int r,int rt){//找第一个比v小的后继
if(l==r){
if(Min[rt]<v)pos2=min(pos2,l);
return;
}
int m=l+r>>;
if(L<=l && R>=r){
if(Min[rt<<]<v)
query2(L,R,v,lson);
else if(Min[rt<<|]<v)
query2(L,R,v,rson);
return;
}
if(L<=m)query2(L,R,v,lson);
if(R>m)query2(L,R,v,rson);
} int main(){
cin>>n;
int mx=,mi=0x3f3f3f3f;
for(int i=;i<=n;i++){
cin>>a[i];
a[i+n]=a[i+*n]=a[i];
mx=max(mx,a[i]);
mi=min(mi,a[i]);
} if(mx<=mi*){
for(int i=;i<=n;i++)cout<<-<<" ";
return ;
} build(,*n,);
ans[*n]=;
for(int i=*n-;i>=;i--){
pos1=pos2=*n+;
query1(i+,*n,a[i],,*n,);//找第一个大于a[i]的位置
query2(i+,*n,1.0*a[i]/,,*n,);//找第一个小于a[i]/2的位置
if(pos1==*n+ && pos2==*n+)//后面都可行
ans[i]=*n-i+;
else if(pos1==*n+)//后面没有比a[i]大的
ans[i]=pos2-i;
else if(pos2==*n+)//后面没有比a[i]/2小的
ans[i]=ans[pos1]+pos1-i;
else if(pos1<pos2)//大的在小的前面
ans[i]=ans[pos1]+pos1-i;
else if(pos1>pos2)
ans[i]=pos2-i;
}
for(int i=;i<=n;i++)
cout<<ans[i]<<" ";
}
线段树求后继+环——cf1237D的更多相关文章
- cf1278D——树的性质+并查集+线段树/DFS判环
昨天晚上本来想认真打一场的,,结果陪女朋友去了.. 回来之后看了看D,感觉有点思路,结果一直到现在才做出来 首先对所有线段按左端点排序,然后用并查集判所有边是否联通,即遍历每条边i,和前一条不覆盖它的 ...
- 2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)
原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthes ...
- UVA 11983 Weird Advertisement --线段树求矩形问题
题意:给出n个矩形,求矩形中被覆盖K次以上的面积的和. 解法:整体与求矩形面积并差不多,不过在更新pushup改变len的时候,要有一层循环,来更新tree[rt].len[i],其中tree[rt] ...
- BNU 2418 Ultra-QuickSort (线段树求逆序对)
题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=2418 解题报告:就是给你n个数,然后让你求这个数列的逆序对是多少?题目中n的范围是n & ...
- hdu 1394 (线段树求逆序数)
<题目链接> 题意描述: 给你一个有0--n-1数字组成的序列,然后进行这样的操作,每次将最前面一个元素放到最后面去会得到一个序列,那么这样就形成了n个序列,那么每个序列都有一个逆序数,找 ...
- xdoj-1324 (区间离散化-线段树求区间最值)
思想 : 1 优化:题意是覆盖点,将区间看成 (l,r)转化为( l-1,r) 覆盖区间 2 核心:dp[i] 覆盖从1到i区间的最小花费 dp[a[i].r]=min (dp[k])+a[i]s; ...
- 4163 hzwer与逆序对 (codevs + 权值线段树 + 求逆序对)
题目链接:http://codevs.cn/problem/4163/ 题目:
- poj2299 Ultra-QuickSort(线段树求逆序对)
Description In this problem, you have to analyze a particular sorting algorithm. The algorithm proce ...
- HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)
链接:线段树求矩形面积并 扫描线+离散化 1.给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2.看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同. 求面积时,用被覆 ...
随机推荐
- Android Studio 打包生成正式apk(XXX-release.apk)的两种方式
{ 方式一:使用Android Studio生成1.点击Build->Generate Signed apk,首次点击可能会提示输入操作系统密码2.弹出如下对话框,还没有生成过keystore ...
- loadRunner函数之web_find
int web_find( const char *StepName, <Attributes and Specifications list>, char *searchstring, ...
- OC学习篇之---谓词(NSPredicate)
在前一篇文章中我们介绍了OC中一个重要技术通知:http://blog.csdn.net/jiangwei0910410003/article/details/41923401,今天我们在来看一下OC ...
- 送礼物(二分加双向DFS)
题目链接 题意:给你n个礼物重量,给你一个M力量,看你一次性搬动不超过M的礼物重量. 思路:看似背包,但M太大.所以要用DFS,但n也有45,所以考虑双向DFS先搜前半部分满足情况的所有重量,然后去重 ...
- vue2 的 过渡(动画)效果
1.在过渡 效果的使用中 ,key属性需要注意 : 有相同父元素的子元素必须有独特的 key.重复的 key 会造成渲染错误. 参考官方说明: https://cn.vuejs.org/ ...
- [jzoj5840]Miner 题解(欧拉路)
首先考虑第一问.每个联通块的情况是相对独立的,所以可以分别求每个联通块的答案.无向图中存在欧拉路的条件是奇点数为0或2,那么合法方案肯定是tp到一个奇点,通过一条欧拉路到另一个奇点,再tp到另一个奇点 ...
- 【从0到1,搭建Spring Boot+RESTful API+Shiro+Mybatis+SQLServer权限系统】04、统一处理异常
本节讨论如何使用Spring的异常处理机制,当我们程序出现错误时,以相同的一种格式,把错误信息返回给客户端 1.创建一些自定义异常 public class TipsException extends ...
- Windows下 wamp下Apache配置虚拟域名
安装好wamp后 找到 找到 Include conf/extra/httpd-vhosts.conf 去掉前面的# 并保存 修改 DocumentRoot 和 ServerName ...
- cs224d 作业 problem set2 (三) 用RNNLM模型实现Language Model,来预测下一个单词的出现
今天将的还是cs224d 的problem set2 的第三部分习题, 原来国外大学的系统难度真的如此之大,相比之下还是默默地再天朝继续搬砖吧 下面讲述一下RNN语言建模的数学公式: 给出一串连续 ...
- 19. HTTP协议二:HTTP请求与响应、常见状态码
HTTP请求与响应 HTTP请求 HTTP请求是指从客户端到服务器端的请求消息.HTTP请求主要由三部分构成,请求行.请求头(headers).body(请求数据). 上图是笔者用Charles抓包工 ...