#include<bits/stdc++.h>
#define maxn 500010
using namespace std;
int tab[maxn], tab1[maxn];
bool spraw(int sr, int n) {
//cout << "s" << endl;
++n;
long long x = tab[sr];
for (int i = 0; i < n; ++i) {
if (i != sr) {
if (tab[i] >= x)
return false;
else
x += (long long)tab[i];
}
}
return true;
}
int bnsrch(int k) {
int n = k;
int p = 0;
while(p != k) {
int sr = (p + k)/2;
if (spraw(sr,n))
k = sr;
else
p = sr+1;
// cout << p << endl;
}
if (spraw(p,n))
return tab[p];
else
return tab[p] + 1;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(NULL);
int n;
cin >> n;
for (int i = 0; i < n; ++i) {
//cout << i << " " << n << endl;
cin >> tab[i];
tab1[i] = tab[i];
}
//puts("a");
sort(tab, tab+n);
int x = bnsrch(n-1);
for (int i = 0; i < n; ++i) {
if (tab1[i] >= x)
cout << "T";
else
cout << "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 61 | #include<bits/stdc++.h> #define maxn 500010 using namespace std; int tab[maxn], tab1[maxn]; bool spraw(int sr, int n) { //cout << "s" << endl; ++n; long long x = tab[sr]; for (int i = 0; i < n; ++i) { if (i != sr) { if (tab[i] >= x) return false; else x += (long long)tab[i]; } } return true; } int bnsrch(int k) { int n = k; int p = 0; while(p != k) { int sr = (p + k)/2; if (spraw(sr,n)) k = sr; else p = sr+1; // cout << p << endl; } if (spraw(p,n)) return tab[p]; else return tab[p] + 1; } int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); int n; cin >> n; for (int i = 0; i < n; ++i) { //cout << i << " " << n << endl; cin >> tab[i]; tab1[i] = tab[i]; } //puts("a"); sort(tab, tab+n); int x = bnsrch(n-1); for (int i = 0; i < n; ++i) { if (tab1[i] >= x) cout << "T"; else cout << "N"; } } |
English