/*
首先开三倍消环(两倍是不够的),倒序求值,线段树找一下后继即可
*/
#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的更多相关文章

  1. cf1278D——树的性质+并查集+线段树/DFS判环

    昨天晚上本来想认真打一场的,,结果陪女朋友去了.. 回来之后看了看D,感觉有点思路,结果一直到现在才做出来 首先对所有线段按左端点排序,然后用并查集判所有边是否联通,即遍历每条边i,和前一条不覆盖它的 ...

  2. 2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)

    原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthes ...

  3. UVA 11983 Weird Advertisement --线段树求矩形问题

    题意:给出n个矩形,求矩形中被覆盖K次以上的面积的和. 解法:整体与求矩形面积并差不多,不过在更新pushup改变len的时候,要有一层循环,来更新tree[rt].len[i],其中tree[rt] ...

  4. BNU 2418 Ultra-QuickSort (线段树求逆序对)

    题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=2418 解题报告:就是给你n个数,然后让你求这个数列的逆序对是多少?题目中n的范围是n & ...

  5. hdu 1394 (线段树求逆序数)

    <题目链接> 题意描述: 给你一个有0--n-1数字组成的序列,然后进行这样的操作,每次将最前面一个元素放到最后面去会得到一个序列,那么这样就形成了n个序列,那么每个序列都有一个逆序数,找 ...

  6. xdoj-1324 (区间离散化-线段树求区间最值)

    思想 : 1 优化:题意是覆盖点,将区间看成 (l,r)转化为( l-1,r) 覆盖区间 2 核心:dp[i]  覆盖从1到i区间的最小花费 dp[a[i].r]=min (dp[k])+a[i]s; ...

  7. 4163 hzwer与逆序对 (codevs + 权值线段树 + 求逆序对)

    题目链接:http://codevs.cn/problem/4163/ 题目:

  8. poj2299 Ultra-QuickSort(线段树求逆序对)

    Description In this problem, you have to analyze a particular sorting algorithm. The algorithm proce ...

  9. HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)

    链接:线段树求矩形面积并 扫描线+离散化 1.给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2.看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同. 求面积时,用被覆 ...

随机推荐

  1. 管理Session

    1:把session和本地线程绑定在一起. 1):创建一个sessionFactory.然后由它去创建session package com.hq.util; import org.hibernate ...

  2. c#将数据导出到excel中

    DataTable   dt = new BLL.T_Expiry().GetAllList().Tables[0];//查询数据 string FileName = "T_Users.xl ...

  3. Echarts 甘特图教程

    Echarts甘特图教程  echarts官网实例: https://gallery.echartsjs.com/editor.html?c=xEYpsVs30s 效果:  代码: <html& ...

  4. 探索Redis设计与实现6:Redis内部数据结构详解——skiplist

    本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...

  5. echarts 柱状图 X(Y)轴数据过多时,滑动以及内置缩放的问题

    前言:在开发中碰到的情况(菜鸟出门).           在使用echarts 图表的时候发现要展示的数据过多,但是系统留的展示框太小,造成数据都挤压在一块(不好看而且新感觉很不专业).       ...

  6. Losing session data in ASP.NET

    Losing session data in ASP.NET By default Response.Redirect terminates thread execution and there mi ...

  7. HTML-参考手册: 元素和有效 DOCTYPES

    ylbtech-HTML-参考手册: 元素和有效 DOCTYPES 1.返回顶部 1. HTML 元素和有效 DOCTYPES HTML 元素 - 有效 DOCTYPES 下面的表格列出了所有的 HT ...

  8. ansible 远程执行时提示 command not found 问题

    问题 最近在学习 ansible ,在使用普通用户远程执行 ip a 命令是发现提示错误:/bin/sh: ip: command not found. 原因 command not found 命令 ...

  9. (转)SQL Server 2012 手动安装帮助文档+排错

    逆天SQL Server 2012装的不要不要的,最后发现...竟然没帮助文档...汗啊!原来它跟vs一样要自己装帮助文档...好吧,官网一下载,妹的...报错...然后就让我们还原这个安装过程以及逆 ...

  10. Spring JDBC FOUND_ROWS 安全吗?

    在很多分页的程序中都这样写: SELECT COUNT(*) from `table` WHERE ......;  查出符合条件的记录总数 SELECT * FROM `table` WHERE . ...