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
83
84
85
#include <bits/stdc++.h>
using namespace std;

int main()
{
	vector <pair < long long, long long > > wektor;
	vector <pair < long long, long long> > odp;
	vector < pair < long long , char > >wyniki;
	
	long long n,a,maxi,mini,licz=1,ilosc,poprzednia=0,check=0;
	
	cin>>n;
	
	for(int i=0; i<n; i++)
	{
		cin>>a;
		wektor.push_back(make_pair(a, i));
	}
	
	sort(wektor.begin(), wektor.end());
	
	mini=wektor[0].first;
	maxi=wektor[n-1].first;
	
	if(mini==maxi)
	{
		for(int i=0; i<n; i++) cout<<"N";
	}
	else
	{
		odp.push_back(make_pair(wektor[0].first, wektor[0].second));
		for(int i=1; i<n; i++)
		{
			if(wektor[i].first==wektor[i-1].first)
			{
				if(check==0)
				{
				odp.push_back(make_pair(odp[i-1].first, wektor[i].second));
				licz++;
				}
				else
				{
				odp.push_back(make_pair(odp[i-1].first+wektor[i].first, wektor[i].second));
				licz++;
				}
			}
			else
			{
				check=1;
				ilosc=licz*wektor[i-1].first;
				licz=1;
				
				odp.push_back(make_pair(ilosc+wektor[i].first+poprzednia, wektor[i].second));
				poprzednia=odp[odp.size()-1].first-wektor[i].first;
			}
		}
		
		wyniki.push_back(make_pair(odp[n-1].second, 'T'));
		long long pozycja=0;
		
		for(int i=n-2; i>=0; i--)
		{
			if(odp[i].first>wektor[i+1].first)
			{
				if(wyniki[pozycja].second=='T')
				{
					wyniki.push_back(make_pair(odp[i].second, 'T'));
				}
				else
				{
					wyniki.push_back(make_pair(odp[i].second, 'N'));
				}
			}
			else
			{
				wyniki.push_back(make_pair(odp[i].second, 'N'));
			}
			pozycja++;
		}
		sort(wyniki.begin(), wyniki.end());
		
		for(int i=0; i<n; i++) cout<<wyniki[i].second;
	}
	return 0;
}