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
#include <iostream>
#include <algorithm>
#include <numeric>
#include <vector>

using namespace std;

int main() {
	int n; cin >> n;

	vector< long long > ryby(n); 
	vector< int > indeksy(n);
	vector< long long > sumy(n+1);
	vector< int > odwrocony(n);

	for (int i = 0; i < n; ++i) {
		cin >> ryby[i];
	}

	iota(indeksy.begin(), indeksy.end(), 0);
	sort(indeksy.begin(), indeksy.end(), [&ryby](auto a, auto b) {
		return ryby[a] < ryby[b];
	});

	sumy[0] = ryby[indeksy[0]];
	for (int i = 1; i < n; ++i) {
		sumy[i] = sumy[i-1] + ryby[indeksy[i]];
	}
	sumy[n] = sumy[n - 1]; // wartownik

	int odmowy = 0;
	for (int i = 0; i < n; ++i) {
		if (ryby[indeksy[i]] == ryby[indeksy[0]]) {
			odmowy = i + 1;
			continue;
		}

		if (sumy[i] <= ryby[indeksy[i+1]]) {
			odmowy = i + 1;
			continue;
		}
	}

	for (int i = 0; i < n; ++i) {
		odwrocony[indeksy[i]] = i;
	}

	for (int i = 0; i < n; ++i) {
		cout << (odwrocony[i] < odmowy ? 'N' : 'T');
	}
	cout << endl;
}