#include <bits/stdc++.h> using namespace std; typedef long long LL; bool func(LL z, vector<int>& tab){ LL y=0, x=0; for(int i=0; i<tab.size()-1 && y<=z; i++){ x=0; for(; x*y*(z-y-x)+y*x*(x-1)/2+(z-y-x)*x*(x-1)/2+x*(x-1)*(x-2)/6<tab[i]; x++); y+=x; } x=z-y; if(y*x*(x-1)/2+x*(x-1)*(x-2)/6<tab.back()) return false; return true; } int beans(vector<int>& tab, LL l, LL r){ while(l+1!=r){ if(func((l+r)/2, tab)) r=(l+r)/2; else l=(l+r)/2; } return l; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int t=(cin>>t, t); srand(time(NULL)); while(t--){ int n=(cin>>n, n); vector<int> tab(n); for(int i=0; i<n; i++) cin>>tab[i]; int maxim=0; for(int i=0; i<50; i++){ int y=rand()%2200000; int x=beans(tab, 0, y); if( x!=y) maxim=max(maxim, x+1); } cout<<maxim<<'\n'; } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include <bits/stdc++.h> using namespace std; typedef long long LL; bool func(LL z, vector<int>& tab){ LL y=0, x=0; for(int i=0; i<tab.size()-1 && y<=z; i++){ x=0; for(; x*y*(z-y-x)+y*x*(x-1)/2+(z-y-x)*x*(x-1)/2+x*(x-1)*(x-2)/6<tab[i]; x++); y+=x; } x=z-y; if(y*x*(x-1)/2+x*(x-1)*(x-2)/6<tab.back()) return false; return true; } int beans(vector<int>& tab, LL l, LL r){ while(l+1!=r){ if(func((l+r)/2, tab)) r=(l+r)/2; else l=(l+r)/2; } return l; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int t=(cin>>t, t); srand(time(NULL)); while(t--){ int n=(cin>>n, n); vector<int> tab(n); for(int i=0; i<n; i++) cin>>tab[i]; int maxim=0; for(int i=0; i<50; i++){ int y=rand()%2200000; int x=beans(tab, 0, y); if( x!=y) maxim=max(maxim, x+1); } cout<<maxim<<'\n'; } return 0; } |