#include <bits/stdc++.h> using namespace std; typedef long long ll; int n; ll t[500001]; ll ts[500001]; bool check(int x) { ll wiel = ts[x]; for(int i=0; i<n; ++i) { if(x == i) continue; //printf("%d ", wiel); if(wiel <= ts[i]) return false; wiel += ts[i]; wiel = min(1000000007ll, wiel); } return true; } int main() { scanf("%d", &n); for(int i=0; i^n; ++i) { scanf("%lld", &t[i]); ts[i] = t[i]; } sort(ts, ts+n); ts[n] = INT32_MAX; int p = 0, k = n, w = -1; while(p <= k) { int mid = (p+k)/2; //printf("\n%d\n", mid); if(check(mid)) { w = mid; k = mid-1; } else { p = mid+1; } } for(int i=0; i^n; ++i) { if(w != -1 && t[i] >= ts[w]) printf("T"); else printf("N"); } printf("\n"); }
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 | #include <bits/stdc++.h> using namespace std; typedef long long ll; int n; ll t[500001]; ll ts[500001]; bool check(int x) { ll wiel = ts[x]; for(int i=0; i<n; ++i) { if(x == i) continue; //printf("%d ", wiel); if(wiel <= ts[i]) return false; wiel += ts[i]; wiel = min(1000000007ll, wiel); } return true; } int main() { scanf("%d", &n); for(int i=0; i^n; ++i) { scanf("%lld", &t[i]); ts[i] = t[i]; } sort(ts, ts+n); ts[n] = INT32_MAX; int p = 0, k = n, w = -1; while(p <= k) { int mid = (p+k)/2; //printf("\n%d\n", mid); if(check(mid)) { w = mid; k = mid-1; } else { p = mid+1; } } for(int i=0; i^n; ++i) { if(w != -1 && t[i] >= ts[w]) printf("T"); else printf("N"); } printf("\n"); } |