题目描述

http://codeforces.com/contest/1339/problem/C

给定一个长度为 \(n\) 的无序数组,你可以在第 \(x\) 秒进行一次下面的操作。

  • 从数组选取任意个数字(也可以一个都不选),为他们全部都加上 \(2^{x-1}\) 。

询问你最少可以用多少秒,使得数组非降序排列。

解题

最快策略

首先简化一下问题,假设操作变成:第 \(x\) 秒,可以选取任意个数字,为他们全部都加上 \(1\) 。分析一下在这个条件下,可以达到最少秒数的策略。

  • 假设我们有一个分布如下图的不规则序列。

  • 最快的让这个序列非降序排列的填充方案如图。

设对数字 \(a_i\) 加 \(1\) 的次数为 \(d_i\),可以不难发现 \(d_i = max\{a_j|j\le i\} - a_i\) ,又因为每次 \(+1\) 操作是批量的,即每次可以选取多个 \(a_i\) 进行 \(+1\) 操作,所以最快策略的秒数花费 \(ans = max\{d_i|i\in[1,n]\}\) 。

最终解题

同理,设对数字 \(a_i\) 加 \(2^{x-1}\) 的操作次数为 \(d_i\),

\[d_i = \left\{ \begin{array}{**lr**} sovle("max\{a_j|j\le i\} - a_i = \sum _{k=1}^{d_i}2^{k-1}")& ,max\{a_j|j\le i\} - a_i\gt 0\\\\ 0& ,max\{a_j|j\le i\} - a_i= 0\\ \end{array} \right.
\]

最后结果 \(ans = max\{d_i|i\in [1,n]\}\) 。

#include<bits/stdc++.h>
#define ll long long #define fr(i,n) for(int i=0;i<n;i++)
#define frs(i,n,flag) for(int i=0;i<n&&flag;i++) #define frr(i,j,n) for(int i=j;i<n;i++)
#define r_frr(i,j,n) for(int i=n-1;i>=j;i--) #define frrs(i,j,n,flag) for(int i=j;i<n&&flag;i++)
#define r_frrs(i,j,n,flag) for(int i=n-1;i>=j&&flag;i--) #define arend(i,n) ((i!=n-1)?" ":"\n")
#define memset0(dp) memset(dp,0,sizeof(dp))
#define print_arr(begin,end) for(auto it = begin;it!=end;it++) cout<<*it<<arend(it,end);
#define log_this(name,value) cout<<name<<": "<<value<<endl;
#define e4 10004
#define e5 100005
#define e6 1000006
#define e7 10000007
#define e9 1000000000
#define INF 9999999
using namespace std;
int to_int(string s) {stringstream ss;ss<<s;int a;ss>>a;return a;}
string to_str(double a) {stringstream ss;ss<<a;return ss.str();} ll a[1*e5]; int main(){ cin.tie(0);
//ios::sync_with_stdio(false);
//cout<<setiosflags(ios::fixed)<<setprecision(0); //freopen("1.out","w",stdout);
int t;
while(cin>>t){
while(t--){
int n;
cin>>n;
fr(i,n){
cin>>a[i];
}
ll pr = 0;
ll maxa = a[0];
fr(i,n-1){
maxa = max(maxa,a[i+1]);
pr = max(pr,maxa-a[i+1]);
}
ll x = 0;
ll pw = 1; while(pr>0){
pr -= pw;
pw *= 2;
x++;
} cout<<x<<endl;
}
} return 0;
}

CF633(div.2)C. Powered Addition的更多相关文章

  1. CF#633 C. Powered Addition 思维

    Powered Addition 题意 给出n个数字,现在你可以在第x秒,选择任意数量的下标,让这些位置上的数加上\(2^{x-1}\),问最快需要几秒使得数列变成一个非递减的序列. 思路 让求x的最 ...

  2. CF633(div.2)A. Filling Diamonds

    题目描述 http://codeforces.com/contest/1339/problem/A 给定一个 \(n(1\le n \le 10^9)\) ,问用一个由两个三角形组成的菱形,填充下面这 ...

  3. CF633(div.2)B. Sorted Adjacent Differences

    题目描述 http://codeforces.com/contest/1339/problem/B 有一个长度为 \(n(3\le n \le 10^5)\) 的整数序列 \(a_1,a_2,..., ...

  4. A. Powered Addition(二进制性质-思维)

    \(拿样例来看1 7 6 5\) \(6成长到7是最合理的,因为1s就可以实现而且对于后面来说最优\) \(5成长到7是最合理的,因为2s就可以实现而且对于后面最优\) \(发现了什么?二进制是可以组 ...

  5. 洛谷 11 月月赛 I Div.2 A [Kubic] Addition 题解

    Content 你有一个长度为 \(n\) 的序列 \(a\).你可以执行 \(n-1\) 次操作,每次操作中你可以选择一个位置 \(i\),并删除 \(a_i\) 和 \(a_{i+1}\),再在原 ...

  6. Codeforces Round #633 (Div. 2)

    Codeforces Round #633(Div.2) \(A.Filling\ Diamonds\) 答案就是构成的六边形数量+1 //#pragma GCC optimize("O3& ...

  7. div+css兼容 ie6_ie7_ie8_ie9_ie10和FireFox_Chrome等浏览器方法

    1.div的垂直居中问题 vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了.缺点是要控制内容不要换行   ...

  8. H5学习系列之Geolocation API

    获取位置信息途径: 1.IP地址地理定位数据 2.GPS地理定位数据 3.WI-FI地理定位数据 4.手机地理定位数据 无废话直接上重点:navigator.geolocation对象就是获取地理位置 ...

  9. MetInfo操作笔记

    1.去版权(前台) 文件路径:templates/模板名称/foot.php <div class="powered_by_metinfo">Powered by &l ...

随机推荐

  1. 手机app抓包工具,安卓手机adb无线连接

    默认手机已经usb调试配置完成 网络必须在同一网络中,每次断开wifi连接,都必须重新重做一次 使用数据线连接电脑 cmd 打开一个命令行 输入 # abd如果没有配置环境变量,请配置或者进入adb文 ...

  2. 项目测试中发现产品bug怎么办

    我所在的产品线,并非公司最大最强的产品 甚至为了推广我们这个产品,一般会拿给客户先免费试用 而在试用之前,是要经过一番通测的,测得很急,测得很快 所以产品bug非常多 那么在测试项目的时候,自然会发现 ...

  3. inspect的使用安卓动态分析工具

    一.安装步骤 1.安装xposed 2.安装inspect 二.inspect 一个基于Xposed 开发的应用动态分析工具 github已开源 内置web页面 体验度很不错 ‘ 核心功能 监控Sha ...

  4. app之---豆果美食

    1.抓包 2.代码 抓取: #!/usr/bin/env python # -*- coding: utf-8 -*- #author tom import requests from multipr ...

  5. 详解聚类算法Kmeans的两大优化——mini-batch和Kmeans++

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第13篇文章,我们来看下Kmeans算法的优化. 在上一篇文章当中我们一起学习了Kmeans这个聚类算法,在算法的最后我 ...

  6. mvc5+ET6入门第一章

    这一篇主要讲的是MVC也就是Model--View--Controller的缩写,没有讲ET.其中 Model(模型)表示应用程序核心(比如数据库记录列表).通常模型对象在数据库中存取数据. View ...

  7. nmap加载nse脚本在内网渗透中的使用-下

    smb-ls.nse 列举共享目录内的文件,配合smb-enum-share使用nmap -p 445 <ip> --script smb-ls --script-args 'share= ...

  8. Mysql数据库设置权限

    这里使用cmd窗口进行权限设置. 以管理员账号连接数据库 创建数据库 create database 数据库名字 default charset=utf8; 查看用户 select user,host ...

  9. 插了带蠕虫的U盘后,文件不见了怎么快速恢复

    朋友插了别人U盘,电脑中毒,找到我,在网上找了一些教程,好多都是用杀软的,懒的下,亲测本教程简单有效 首先,我们创建了一个reg文件(注册表文件),如下, 利用REG文件我们可以直接对注册表进行任何修 ...

  10. [单调栈]小A的柱状图

    链接:https://ac.nowcoder.com/acm/problem/23619来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...