CF#633 C. Powered Addition 思维
2024-09-07 13:45:11
Powered Addition
题意
给出n个数字,现在你可以在第x秒,选择任意数量的下标,让这些位置上的数加上\(2^{x-1}\),问最快需要几秒使得数列变成一个非递减的序列。
思路
让求x的最小值,转换一下。
假设第i个数字在x秒内加的权值为val[i]
,x的最小值即让val[i]
最大值最小。
如何最小,如果a[i-1]
>a[i]
,就让a[i]=a[i-1]
,计算它们差值的二进制最高位,取最大值。
代码
//#include<bits/stdc++.h>
#include<vector>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<string>
#include<math.h>
#include<queue>
#include<map>
#define pb push_back
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e6+10;
const int mod=1e9+7;
const ll inf=0x3f3f3f3f3f3f3f3f;
const double eps=1e-14;
ll arr[N];
int main()
{
ll T;
scanf("%lld",&T);
while(T--)
{
ll n;
scanf("%lld",&n);
for(ll i=1;i<=n;i++)
scanf("%lld",&arr[i]);
ll ans=0,maxn=-inf;
for(ll i=1;i<=n;i++)
{
ll cnt=0;
if(arr[i]<maxn)
{
ll dis=maxn-arr[i];
while(dis)
{
dis/=2;
cnt++;
}
}
maxn=max(maxn,arr[i]);
ans=max(ans,cnt);
}
printf("%lld\n",ans);
}
return 0;
}
最新文章
- PHP探针
- 浅谈Json和jsonp
- ubuntu10.04+win7双系统,重装win7后,恢复grub引导菜单以及命令行引导linux
- axure rp extension的下载
- win10系统更新补丁时进度条一直卡在0%不动的解决方案
- jboss内存管理
- 关于C#中Thread.Join()的一点理解
- usb开发笔记
- HDU 1071 - The area
- BZOJ 3931: [CQOI2015]网络吞吐量( 最短路 + 最大流 )
- css控制table的td宽度
- 在Ubuntu下如何切换到超级用户
- k-近邻(KNN)算法改进约会网站的配对效果[Python]
- dubbo本地服务化实现(dubbo三)
- 【搬运工】 Can&#39;t connect to local MySQL server through socket &#39;/var/lib/mysql/mysql.sock&#39;
- 表达式语言引擎:Apache Commons JEXL 2.1 发布
- golang注意问题
- tmux的使用
- HDU - 1712 - ACboy needs your help 【分组背包】
- 雇佣K个工人的最小费用 Minimum Cost to Hire K Workers