C - Powered Addition
C - Powered Addition
You have an array a of length n. For every positive integer x you are going to perform the following operation during the x-th second:
Select some distinct indices i1,i2,…,ik which are between 1 and n inclusive, and add 2x−1 to each corresponding position of a. Formally, aij:=aij+2x−1 for j=1,2,…,k. Note that you are allowed to not select any indices at all.
You have to make a nondecreasing as fast as possible. Find the smallest number T such that you can make the array nondecreasing after at most T seconds.
Array a is nondecreasing if and only if a1≤a2≤…≤an.
You have to answer t independent test cases.
Input
The first line contains a single integer t (1≤t≤104) — the number of test cases.
The first line of each test case contains single integer n (1≤n≤105) — the length of array a. It is guaranteed that the sum of values of n over all test cases in the input does not exceed 105.
The second line of each test case contains n integers a1,a2,…,an (−109≤ai≤109).
Output
For each test case, print the minimum number of seconds in which you can make a nondecreasing.
Example
Input
3
4
1 7 6 5
5
1 2 3 4 5
2
0 -4
Output
2
0
3
Note
In the first test case, if you select indices 3,4 at the 1-st second and 4 at the 2-nd second, then a will become [1,7,7,8]. There are some other possible ways to make a nondecreasing in 2 seconds, but you can’t do it faster.
In the second test case, a is already nondecreasing, so answer is 0.
In the third test case, if you do nothing at first 2 seconds and select index 2 at the 3-rd second, a will become [0,0].
思路:找到当前位置和前面数的最大差值,把每一个位置的add合并可以得到形如10010的二进制数即差值,假设二进制数的长度为ans,那么它可以表示0~pow(2,ans)-1的数,所以我们只需要求出最大的一个差值需要多少位二进制表示出来即可
#include<iostream>
#include<cmath>
using namespace std;
const int N=1e5+10;
int a[N],qz[N],mx;
int main()
{int t;cin>>t;while(t--){int n;cin>>n;mx=0;for(int i=1;i<=n;i++) scanf("%d",a+i);qz[1]=a[1];for(int i=2;i<=n;i++){qz[i]=max(qz[i-1],a[i]);mx=max(mx,qz[i]-a[i]);}long long ans=0;while(pow(2,ans)-1<mx) ans++;cout<<ans<<endl;}
}
C - Powered Addition相关推荐
- Codeforces Round #633 (Div. 2) C.Powered Addition
Codeforces Round #633 (Div. 2) C.Powered Addition 题目链接 You have an array a of length n. For every po ...
- A. Powered Addition【贪心】
要想递增,故每一个数都大于等于前面的最大值.存一下这个最大的差值. 然后求其二进制位数,就是最优解. #include<bits/stdc++.h> using namespace std ...
- CodeForces - 1339C Powered Addition(思维+贪心)
题目链接:点击查看 题目大意:给出一个由 n 个数组成的数列 a,选择一个最小的 k ,代表可以进行 k 次操作,对于第 t 次操作可以选择任意个位置使得 a[ i ] = a[ i ] + 2^( ...
- Powered Addition CodeForces - 1339C(位运算)
You have an array a of length n. For every positive integer x you are going to perform the following ...
- XUPT_ACM2021寒假训练第一周练习记录
试题链接:第一周训练题 - Virtual Judge 目录 A - 查成绩 B - 放暑假 C - 展开字符串 D - 回文数猜想 E - 宇航员 F - 买鸡问题 G - 水贴 H - 最小新整数 ...
- 组件分享之后端组件——国际化组件go-i18n
组件分享之后端组件--国际化组件go-i18n 背景 近期正在探索前端.后端.系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件 ...
- CF第633场 (Div. 2)
CF第633场 (Div. 2) 今天开始也开始写cf题解了,致力于分析巧解和题目的思维. 本次战绩:惨不忍睹,一直卡D,看来必须要进行数据结构了,说的也是,dfs和bfs都不会写是真的丢人. A题F ...
- Codeforces补题记录(1)
文章目录 Codeforces补题记录(1) 1.Codeforces Round #632 (Div. 2)(2020.4.11) A.Little Artem B.Kind Anton *C.Eu ...
- 第13届年度Webby奖采用Silverlight / 13th Annual Webby Awards powered by Silverlight
13th Annual Webby Awards powered by Silverlight 第13届年度Webby奖采用Silverlight 原文连接:http://team.silverlig ...
最新文章
- 基于RFID的防伪系统设计
- linux环境中,查询网卡的速度(带宽)
- Infortrend推出超大容量存储解决方案
- Python 中的面向对象没有意义
- Java8函数式编程(5)--中间操作(源码)
- RabbitMQ开机启动 Centos7环境
- 使软件可二次开发_RobotStudio二次开发:Smart组件I/O信号声明
- jQuery动画效果之上卷下拉
- 谷歌地球-覆盖全球任何一个角落的地图软件
- 郝斌老师 c语言学习笔记
- 微信小程序http模块和接口model模块
- 互联网+餐饮:看李帅与面点王董事长张和平如何说
- 坦克类游戏的制作之路
- 微软的mak与kms区别
- 服务器重装系统进入pe找不到硬盘,U盘装系统进入PE无法找到硬盘怎么办?
- Python str strip方法
- 神操作!树莓派上运行滴滴开源的Logi-KafkaManager,你见过没?
- 文件服务器杀毒软件推荐,服务器杀毒软件哪个好 服务器装什么杀毒软件【详解】...
- 2022-2028全球过冷计量装置行业调研及趋势分析报告
- 微博全量开放IP属地功能;“月薪三千能买什么样的手机”上热搜,苹果第一;​华为轮值董事长胡厚崑:没有自建芯片厂计划 | EA周报...