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 }

浙公网安备 33010602011771号