#include <bits/stdc++.h> using namespace std; int n,p,k,mid; long long t[500005]; vector <long long> v; bool chk(int x) { long long s=v[x]; for (int i=0; i<n; i++) { if (i==x) continue; if (s>v[i]) s+=v[i]; else return false; } return true; } int main() { scanf("%d",&n); for (int i=0; i<n; i++) { scanf("%lld",&t[i]); v.push_back(t[i]); } sort(v.begin(),v.end()); k=n-1; while (p<k) { mid=(p+k)/2; if(chk(mid)) k=mid; else p=mid+1; } if (!chk(p)) { for (int i=0; i<n; i++) { printf("N"); } return 0; } for (int i=0; i<n; i++) { if (t[i]<v[p]) printf("N"); else printf("T"); } }
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 | #include <bits/stdc++.h> using namespace std; int n,p,k,mid; long long t[500005]; vector <long long> v; bool chk(int x) { long long s=v[x]; for (int i=0; i<n; i++) { if (i==x) continue; if (s>v[i]) s+=v[i]; else return false; } return true; } int main() { scanf("%d",&n); for (int i=0; i<n; i++) { scanf("%lld",&t[i]); v.push_back(t[i]); } sort(v.begin(),v.end()); k=n-1; while (p<k) { mid=(p+k)/2; if(chk(mid)) k=mid; else p=mid+1; } if (!chk(p)) { for (int i=0; i<n; i++) { printf("N"); } return 0; } for (int i=0; i<n; i++) { if (t[i]<v[p]) printf("N"); else printf("T"); } } |