Codefoeces 1339C Powered Addition

题意:给定长度为n的数组,你可以在第x秒选择数组中的任意一段子序列让选中的元素加上2^(x-1),问最小的时间使得数组递增。

思路:显而易见最优解一定是逆序对中最大的差值在二进制下的位数

code:

 1 #include<bits/stdc++.h>
 2 
 3 using namespace std;
 4 typedef long long ll;
 5 
 6 int main(){
 7     int T;
 8     cin>>T;
 9     while(T--){
10         int n;
11         ll ans = 0, num1 = INT_MIN, num2 = 0, x;
12         cin>>n;
13         for(int i = 1; i <= n; i++){
14             cin>>x;
15             num1 = max(num1, x);
16             num2 = max(num2, num1 - x);
17         }
18         while(num2){
19             ans++;
20             num2 /= 2;
21         }
22         cout<<ans<<endl;
23     }
24 }
View Code

 

posted @ 2020-04-13 10:37  魏紫桃黄  阅读(125)  评论(0)    收藏  举报