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
62
63
64
65
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
     ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n;
    cin >> n;
    vector<pair<int, int>> t(n, {0 , 0});
    vector<int> x(n, 0);
    for (int i = 0; i < n; i++) {
        int temp;
        cin >> temp;
        t[i] = {temp, i};
        x[i] = temp;
    }
    vector<int> p(n, 0);
    sort(t.begin(), t.end());
    for (int i = 0; i < n; i++) {
        p[i] = p[i != 0 ? i - 1 : 0] + t[i].first;
    }

    int ok = -1;
    int start = t[0].first;
    bool changed = false;
    int index = 0;
    int curr_sum = t[0].first;
    bool zle = false;
    vector<bool> dodano(n, false);
    for (int i = 1; i < n; i++) {
        //cout << "i= " << i << endl;
        //cout << "curr_sum przed: " << curr_sum << endl;
        if (curr_sum > t[i].first) {
            if (!dodano[i]) curr_sum += t[i].first;
        }
        else {
            int j = index + 1;
            zle = true;
            if (j >= n) break;
            while(curr_sum + t[j].first <= t[i].first || t[j].first == t[index].first) {
                j++;
                if (j >= n) goto here;
            }
            index = j;
            curr_sum += t[index].first;
            dodano[index] = true;
            zle = false;
        }
        //cout << "curr_sum po: " << curr_sum << endl;
    }
    here:
    if (zle) {
        for (int i = 0; i < n; i++) cout << 'N';
        return 0;
    }
    for (auto s : x) {
        if (s >= t[index].first) cout << 'T';
        else cout << 'N';
    }



}