题目大意:

给定nnn个正整数aia_iai​,每次可以将一个数乘以-2,求最小的操作次数使得最后的序列单调不降。

思路:

最后的序列一定是前面为负数,后面为正数。
于是我们枚举正数负数的分割点,这样操作就只有乘4一种了,现在问题转化为用最小的操作次数将一段前缀变成单调不升和一段后缀变成单调不降的。
前缀和后缀的情况类似,现在考虑前缀:不难发现每添加一个新的点iii,前面的数就要选择一截乘[j,i−1][j,i-1][j,i−1]乘4,也就是上升到新的数的上面,这个时候ai−1≥aia_{i-1}\ge a_iai−1​≥ai​。
如果原来ai−1≥aia_{i-1}\geq a_iai−1​≥ai​,那么这个时候aia_iai​便有一段上升的空间,以后后面的数要上升的时候可以到aia_iai​这里就停了。
于是发现我们要维护其实就是一个阶梯状的图案,每次将高度较小的抬升一段距离,这个直接用栈来维护即可。

#include<bits/stdc++.h>#define REP(i,a,b) for(int i=a,i##_end_=b;i<=i##_end_;++i)
#define DREP(i,a,b) for(int i=a,i##_end_=b;i>=i##_end_;--i)
#define debug(x) cout<<#x<<"="<<x<<" "
#define pii pair<ll,ll>
#define fi first
#define se second
#define mk make_pair
#define pb push_back
typedef long long ll;using namespace std;void File(){freopen("e.in","r",stdin);freopen("e.out","w",stdout);
}template<typename T>void read(T &_){_=0; T f=1; char c=getchar();for(;!isdigit(c);c=getchar())if(c=='-')f=-1;for(;isdigit(c);c=getchar())_=(_<<1)+(_<<3)+(c^'0');_*=f;
}const int maxn=2e5+10;
int n;
ll a[maxn],f[maxn],g[maxn],ans=1e18;int main(){File();read(n);REP(i,1,n)read(a[i]);stack<pii>s1;REP(i,2,n){f[i]=f[i-1];ll pre=a[i-1],now=a[i];while(pre<a[i]){pre*=4;if(s1.empty())f[i]+=(i-1)*2;else{pii p=s1.top(); s1.pop();f[i]+=(i-p.fi)*2;if(--p.se)s1.push(p);}}ll cnt=0;while(now*4<=pre)now*=4,++cnt;if(cnt)s1.push(mk(i,cnt));}reverse(a+1,a+n+1);stack<pii>s2;REP(i,2,n){g[i]=g[i-1];ll pre=a[i-1],now=a[i];while(pre<a[i]){pre*=4;if(s2.empty())g[i]+=(i-1)*2;else{pii p=s2.top(); s2.pop();g[i]+=(i-p.fi)*2;if(--p.se)s2.push(p);}}ll cnt=0;while(now*4<=pre)now*=4,++cnt;if(cnt)s2.push(mk(i,cnt));}reverse(g+1,g+n+1);REP(i,0,n)ans=min(ans,f[i]+g[i+1]+i);printf("%lld\n",ans);return 0;
}

[atcoder caddi]E - Negative Doubling——栈+贪心相关推荐

  1. LeetCode 1130. 叶值的最小代价生成树(区间DP/单调栈贪心)

    文章目录 1. 题目 2. 解题 2.1 DP 2.2 单调栈贪心 1. 题目 给你一个正整数数组 arr,考虑所有满足以下条件的二叉树: 每个节点都有 0 个或是 2 个子节点. 数组 arr 中的 ...

  2. Atcoder CADDi 2018 Solution

    C - Product and GCD Solved. 题意: 给出$n个数$的乘积,求$这n个数$的最大的可能是GCD 思路: 分解质因子,那么$每个质因子的贡献就是其质因子个数/ n的乘积$ 1 ...

  3. CodeForces - 1506G Maximize the Remaining String(单调栈+贪心)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串,假设共出现了 kkk 种字母,现在要求出一个长度为 kkk 的子序列,满足每种字母只出现一次,且字典序最大 题目分析:和之前牛客上的一道 ...

  4. [蓝桥杯][算法训练VIP]旅行家的预算(单调栈+贪心)

    题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市 到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P ...

  5. 力扣 第314场周赛 Q3 使用机器人打印字典序最小的字符串【难度:中等,rating: 1953】(栈+贪心)

    题目链接 https://leetcode.cn/problems/using-a-robot-to-print-the-lexicographically-smallest-string/ 题目来源 ...

  6. AtCoder AGC032E Modulo Pairing (二分、贪心结论)

    题目链接 https://atcoder.jp/contests/agc032/tasks/agc032_e 题解 猜结论好题. 结论是: 按\(a_i\)从小到大排序之后,一定存在一种最优解,使得以 ...

  7. AtCoder AGC032E Modulo Pairing (二分、贪心与结论)

    题目链接 https://atcoder.jp/contests/agc032/tasks/agc032_e 题解 猜结论好题. 结论是: 按\(a_i\)从小到大排序之后,一定存在一种最优解,使得以 ...

  8. 【uoj#174】新年的破栈 贪心

    题目描述 给你一个长度为 $n$ 的序列和一个空的双端队列,每次进行3种操作种的一种: 1.将序列中编号最小的数加入到双端队列的队尾: 2.从双端队列的队尾取出一个数: 3.从双端队列的队头取出一个数 ...

  9. 2018.09.19 atcoder AtCoDeer and Election Report(贪心)

    传送门 很有意思的一道贪心. 就是每次翻最小的倍数来满足条件. 代码: #include<bits/stdc++.h> #define ll long long using namespa ...

最新文章

  1. asp 设置table 间距_B端后台表格(table)如何设计
  2. 1、利用蓝牙定位及姿态识别实现一个智能篮球场套件(一)——用重写CC2541透传模块做成智能手环...
  3. 通过FFMPEG代码学习函数指针和指针函数
  4. 暴风集团否认暴风TV公司解散:融资事项正在加紧推进中
  5. MVC Tutorial Movie DIY
  6. 博诺杯工业机器人比赛2019_关于举办第三届“汇博-博诺杯”全国高职院校工业机器人虚拟仿真大赛的通知...
  7. Luogu P2880 [USACO07JAN]平衡的阵容Balanced Lineup (ST表模板)
  8. SSM框架整合环境搭建
  9. R语言数据缺失值处理
  10. 欧姆龙 CP系列PLC以太网通讯处理器的应用连接组态王步骤
  11. 4万字【Python高级编程】保姆式教学,330页PDF10万字的知识点总结
  12. 项目经理之项目经理的必备能力
  13. 零基础如何自学编程?| 程序员有话说
  14. Meth | 小团队git开发模式
  15. signature=ea57837e317417d5dc2e9ff5dc53ac51,ma11eab1e signatures for resource constrained p1atfonns
  16. Java类的初始化、变量的初始化
  17. 【OCR】CTC loss原理
  18. 如何彻底放松你的小腿—告别小腿足踝伤痛
  19. NASA Earthdata Search批量下载modis数据
  20. InsightFace实现人脸比对[升级版] | 不用建立索引的那种 (二)

热门文章

  1. 实验4 图的应用问题 给定n个村庄之间的交通图,现计划在n个村庄中选定一个村庄建造一所医院,请设计方案解决问题
  2. Eslint 配置及规则说明
  3. asp mysql 符号乱码_asp MYSQL出现问号乱码的解决方法
  4. Vue实现功能齐全的地图组件 - 附效果图及源码
  5. a++和++a;a+=和a=a+1的区别
  6. 大数据传输如何加密保护你的数据安全!
  7. BitMap的recycle问题
  8. 代码随想录算法训练营第二十五天|216.组合总和III 17.电话号码的字母组合
  9. nrf52832 DUF功能加看门狗
  10. 立体视觉———计算机视觉