#include<bits/stdc++.h> using namespace std; int n; pair <int,int> tab[500004]; bool odp[500004]; bool krol(int ind) { long long sum = tab[ind].first; for(int i = 0;i < ind; i++) if(tab[i].first < sum) sum += tab[i].first; else return 0; for(int i = ind + 1; i < n; i++) { int x = tab[i].first; if(sum > x) sum += x; else return 0; } return 1; } int main() { cin>>n; for(int i = 0;i < n; i++) { cin>>tab[i].first; tab[i].second = i; } sort(tab,tab + n); tab[n].first = 2e9; int L = 0,P = n; while(L != P) { int S = (L + P) / 2; if(!krol(S)) L = S + 1; else P = S; } for(int i = L;i < n; i++) odp[tab[i].second] = true; for(int i = 0;i < n; i++) if(odp[i]) cout<<'T'; else cout<<'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 45 46 47 48 49 50 51 52 53 54 | #include<bits/stdc++.h> using namespace std; int n; pair <int,int> tab[500004]; bool odp[500004]; bool krol(int ind) { long long sum = tab[ind].first; for(int i = 0;i < ind; i++) if(tab[i].first < sum) sum += tab[i].first; else return 0; for(int i = ind + 1; i < n; i++) { int x = tab[i].first; if(sum > x) sum += x; else return 0; } return 1; } int main() { cin>>n; for(int i = 0;i < n; i++) { cin>>tab[i].first; tab[i].second = i; } sort(tab,tab + n); tab[n].first = 2e9; int L = 0,P = n; while(L != P) { int S = (L + P) / 2; if(!krol(S)) L = S + 1; else P = S; } for(int i = L;i < n; i++) odp[tab[i].second] = true; for(int i = 0;i < n; i++) if(odp[i]) cout<<'T'; else cout<<'N'; return 0; } |