YunYan

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

题目大意:任意时间x,选择任意个数任意位置的元素,加上pow(2,x-1),最终要求数组单调不下降。

题解:题目要求数组不下降,如过说arr[i]<arr[i-1],我们尽量让arr[i]==arr[i-1],因为二进制可以表示任何数字,所以我们求出来arr[i]和arr[i-1]之间的最大差距,然后输出他的二进制位最高位的1所在的位置就好了.......唉

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e5+7;
ll arr[N];
void solve(){
    ll n;
    cin>>n;
    for(ll i=1;i<=n;i++) cin>>arr[i];
    ll tmp=0;
    for(ll i=2;i<=n;i++){
        if(arr[i]>=arr[i-1]) continue ;
        else {
            tmp=max(arr[i-1]-arr[i],tmp);
            arr[i]=arr[i-1];
        }
    }
    ll ans=0;
    ll time=0;
    for(ll i=0;i<=32;i++){
        if((tmp>>i)&1) time=i+1;
    }
    cout<<time<<endl;
}

int main(){
    ll t;
    cin>>t;
    while(t--) solve();
    return 0;
}

 

posted on 2020-04-29 13:26  Target--fly  阅读(164)  评论(0编辑  收藏  举报