#include <bits/stdc++.h>
using namespace std;
#define FOR(i,p,q) for(int i=(p); i<=(q); ++i)
#define ROF(i,p,q) for(int i=(p); i>=(q); --i)
#define REP(i,q) for(int i=0; i<(q); ++i)
#define pb push_back
#define as assign
#define rz resize
#define Co const
#define all(X) X.begin(), X.end()
#define rall(X) X.rbegin(), X.rend()
#define sz(X) (int)(X.size())
#define ckmax(a,b) a=max(a,b)
#define ckmin(a,b) a=min(a,b)
#define V vector
typedef long long ll;
typedef mt19937_64 mt;
#ifndef UNCLE
typedef basic_string<bool> vb;
typedef basic_string<int> vi;
typedef basic_string<ll> vl;
#else
typedef V<bool> vb;
typedef V<int> vi;
typedef V<ll> vl;
#endif
constexpr int MX_N=2e5, MX_SV=1e6, MX_RV=1e5; //zawyzone maxy
int N;
vi s;
void Input(){
cin>>N;
s.rz(N);
for(int &vv:s) cin>>vv;
}
bool IsPos(int qtA){
int qtP=0;
REP(i,N){
int p=0,qtC,q=min(MX_RV,qtA-qtP);
ll cv=(ll)qtP*q*(q-1)/2+(ll)q*(q-1)*(q-2)/6;
if(cv<s[i]) return 0;
while(p<=q){
qtC=(p+q)/2;
cv=(ll)qtP*qtC*(qtA-qtP-qtC)+(ll)(qtA-qtC)*qtC*(qtC-1)/2+(ll)qtC*(qtC-1)*(qtC-2)/6;
if(cv>=s[i]) q=qtC-1;
else p=qtC+1;
}
qtP+=q+1;
}
return 1;
}
void Solve(){
Input();
int p=1,m,q=MX_SV;
while(p<=q){
m=(p+q)/2;
if(IsPos(m)) q=m-1;
else p=m+1;
}
cout<<q+1<<"\n";
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int T;cin>>T;
while(T--) Solve();
}
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | #include <bits/stdc++.h> using namespace std; #define FOR(i,p,q) for(int i=(p); i<=(q); ++i) #define ROF(i,p,q) for(int i=(p); i>=(q); --i) #define REP(i,q) for(int i=0; i<(q); ++i) #define pb push_back #define as assign #define rz resize #define Co const #define all(X) X.begin(), X.end() #define rall(X) X.rbegin(), X.rend() #define sz(X) (int)(X.size()) #define ckmax(a,b) a=max(a,b) #define ckmin(a,b) a=min(a,b) #define V vector typedef long long ll; typedef mt19937_64 mt; #ifndef UNCLE typedef basic_string<bool> vb; typedef basic_string<int> vi; typedef basic_string<ll> vl; #else typedef V<bool> vb; typedef V<int> vi; typedef V<ll> vl; #endif constexpr int MX_N=2e5, MX_SV=1e6, MX_RV=1e5; //zawyzone maxy int N; vi s; void Input(){ cin>>N; s.rz(N); for(int &vv:s) cin>>vv; } bool IsPos(int qtA){ int qtP=0; REP(i,N){ int p=0,qtC,q=min(MX_RV,qtA-qtP); ll cv=(ll)qtP*q*(q-1)/2+(ll)q*(q-1)*(q-2)/6; if(cv<s[i]) return 0; while(p<=q){ qtC=(p+q)/2; cv=(ll)qtP*qtC*(qtA-qtP-qtC)+(ll)(qtA-qtC)*qtC*(qtC-1)/2+(ll)qtC*(qtC-1)*(qtC-2)/6; if(cv>=s[i]) q=qtC-1; else p=qtC+1; } qtP+=q+1; } return 1; } void Solve(){ Input(); int p=1,m,q=MX_SV; while(p<=q){ m=(p+q)/2; if(IsPos(m)) q=m-1; else p=m+1; } cout<<q+1<<"\n"; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0); int T;cin>>T; while(T--) Solve(); } |
English