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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

struct Fish
{
	int index, value;

	bool operator <(Fish fish) const
	{
		if(value == fish.value)
		{
			return index < fish.index;
		}

		return value < fish.value;
	}
};

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int size;
	cin >> size;

	vector<Fish> fish(size);

	for(int index = 0; index < size; index++)
	{
		cin >> fish[index].value;
		fish[index].index = index;
	}

	sort(fish.begin(), fish.end());

	int begin = 0, end = size - 1;

	while(begin != end)
	{
		int middle = (begin + end + 1) / 2;
		long long current = fish[middle].value;
		
		int index = 0;

		while(index < size && fish[index].value < current)
		{
			if(index != middle)
			{
				current += fish[index].value;
			}
			
			index++;
		}

		if(index == size)
		{
			end = middle - 1;
		}
		else
		{
			begin = middle;
		}
	}

	vector<bool> results(size);

	for(int index = begin + 1; index < size; index++)
	{
		results[fish[index].index] = true;
	}

	for(int index = 0; index < size; index++)
	{
		cout << (results[index] ? 'T' : 'N');
	}

	cout << '\n';
}