#include using namespace std; #define rep(i,a,b) for(ll i=a;i=b;i--) #define ll long long #define ull unsigned ll #define ld long double #define bl __int128_t #define fi first #define se second #define vel vector #define vvel vector #define pll pair #define vepll vector #define vvepll vector #define ves vector #define vem vector #define vvem vector #define pmm pair #define cleout(i) cout<using PQ=priority_queue,greater>; // 上 右 下 左 vector di={-1, 0, 1, 0}; vector dj={ 0, 1, 0,-1}; vector dx={ 0, 1, 0,-1}; vector dy={ 1, 0,-1, 0}; vector ddx={ 1, 1, 1, 0, -1, -1, -1, 0 }; vector ddy={ 1, 0, -1, -1, -1, 0, 1, 1 }; ll inf=1000000000000000000;//1e18 // LLONG_MAX mt19937_64 rng((ull)chrono::steady_clock::now().time_since_epoch().count()); void _solve(){ ll N; cin>>N; vel a(N); rep(i,0,N){ cin>>a[i]; } auto f=[&](ll mid){ vel sum(mid+1,0); rep(i,0,a.size()){ if(a[i]>=mid)sum[0]++; else sum[a[i]]++; } sum[0]+=sum[1]; sum[1]=0; ll now=1; rrep(i,mid,1){ if(sum[i]>=now){ sum[i]-=now; }else{ now+=(now-sum[i]); } if(sum[i]){ sum[0]+=sum[i]; } if(now>N)return 0ll; } return (ll)(now<=sum[0]); }; ll ok=1; ll ng=a.size()+1; while(ng-ok>1){ ll mid=(ok+ng)/2; if(f(mid))ok=mid; else ng=mid; } cout<>_; else _=1; rep(__,0,_){ _solve(); } }