链接:https://codeforces.com/contest/1339/problem/C
题意:给你一个数组,你可以在第x秒选一些元素让它们都加上 2^(x-1),问至少需要多少秒可以使数组变成非递减的数组。
题解:找所有逆序对差值中最大的,然后找这个数二进制有几位
code:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e5+10; ll a[maxn],ans[maxn]; void solve() { int n; scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%lld",&a[i]); ll ma=a[1],maxx=0; for(int i=2; i<=n; i++) { if(a[i]<ma) maxx=max(maxx,ma-a[i]); else if(a[i]>=ma) ma=a[i]; } if(maxx==0) printf("0 "); else { int cnt=0; while(maxx) { maxx/=2; cnt++; } printf("%d ",cnt); } } int main() { int t; cin>>t; while(t--) solve(); //system("pause"); return 0; }