/*
首先开三倍消环(两倍是不够的),倒序求值,线段树找一下后继即可
*/
#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. JMeter 阶梯式加压测试插件 Concurrency Thread Group

    jmeter阶梯式加压测试:JMeter 阶梯式加压测试插件 Stepping Thread Group 由于Stepping Thread Group插件相对来说过于老旧,已不被官方所推荐. 所以这 ...

  2. BZOJ 2653: middle(主席树+二分答案)

    传送门 解题思路 首先可以想到一种暴力做法,就是询问时二分,然后大于等于这个值的设为1,否则设为-1,然后就和GSS1那样统计答案.但是发现这样时间空间复杂度都很爆炸,所以考虑预处理,可以用主席树来做 ...

  3. [六省联考2017]分手是祝愿 题解(期望dp)

    题目描述 B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态,下标为从 1 到 n 的正整数. 每个灯有两个状态亮和灭,我们用 1 来表示这个灯是亮的,用 0 表示 ...

  4. HTML5: HTML5 Video(视频)

    ylbtech-HTML5: HTML5 Video(视频) 1.返回顶部 1. HTML5 Video(视频) 很多站点都会使用到视频. HTML5 提供了展示视频的标准. 检测您的浏览器是否支持 ...

  5. 【git】git的内部原理

    参考文章:https://zhuanlan.zhihu.com/p/96631135 参考文章:https://marklodato.github.io/visual-git-guide/index- ...

  6. ROW_NUMBER() over(order by ID desc ) as RowNumber 返回类型问题

    因为ID是int类型,所以ROW_NUMBER() over(order by ID desc ) as RowNumber 想当然的认为是Int类型 实际ROW_NUMBER() over(orde ...

  7. Java异常抛出

    如果要在一段代码中抛出一个已检查的异常,有两个选择: 使用try-catch块处理已检查的异常. 在方法/构造函数声明中用throws子句指定. 语法 throws子句的一般语法是: 1 2 3 &l ...

  8. 使用 C++ 编写的基础 Windows 服务 (CppWindowsService)

    最近项目中涉及到使用C++写一个后台服务程序,找了很多资料,还是使用Google搜索找到了比较详细点的资料,就是从微软官方MSDN的例子,如下: 使用 C++ 编写的基础 Windows 服务 (Cp ...

  9. MySQL数据库学习初步

    我使用的环境是Win7,开始学习PHP和MySQL,并且买了本<Head First PHP & MySQL>,可以从Head First Labs官网获得HeadFirst系列书 ...

  10. leetcode.矩阵.378有序矩阵中第K小的元素-Java

    1. 具体题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素.请注意,它是排序后的第k小元素,而不是第k个元素. 示例: matrix = [ [ 1,  5, ...