#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<pair<int,int>> t;
bool canBe[500005];
int n;
bool canBeBest(int k){
long long wielkosc = t[k].first;
for (int i = 0; i < t.size(); i++){
if (i != k){
if (t[i].first < wielkosc){
wielkosc += t[i].first;
}
else {
return false;
}
}
}
return true;
}
int main(){
cin >> n;
for (int i = 0; i < n; i++){
int a;
cin >> a;
t.push_back(make_pair(a, i));
}
sort(t.begin(), t.end());
int e = 0, f = t.size() - 1, l = n + 1;
while (e <= f){
int mid = (e + f) / 2;
if (canBeBest(mid)){
l = mid;
f = mid - 1;
}
else {
e = mid + 1;
}
}
//cout << l << "\n";
for (int i = l; i < n; i++){
canBe[t[i].second] = true;
}
for (int i = 0; i < n; i++){
if (canBe[i]){
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 | #include <iostream> #include <vector> #include <algorithm> using namespace std; vector<pair<int,int>> t; bool canBe[500005]; int n; bool canBeBest(int k){ long long wielkosc = t[k].first; for (int i = 0; i < t.size(); i++){ if (i != k){ if (t[i].first < wielkosc){ wielkosc += t[i].first; } else { return false; } } } return true; } int main(){ cin >> n; for (int i = 0; i < n; i++){ int a; cin >> a; t.push_back(make_pair(a, i)); } sort(t.begin(), t.end()); int e = 0, f = t.size() - 1, l = n + 1; while (e <= f){ int mid = (e + f) / 2; if (canBeBest(mid)){ l = mid; f = mid - 1; } else { e = mid + 1; } } //cout << l << "\n"; for (int i = l; i < n; i++){ canBe[t[i].second] = true; } for (int i = 0; i < n; i++){ if (canBe[i]){ cout << 'T'; } else { cout << 'N'; } } } |
English