#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; } |
English