题目大意:任意时间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; }