#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include<algorithm> using namespace std; int main() { std::ios_base::sync_with_stdio(false); long long int i, n, k, a; pair<int, int> tab[500100] = { {0,0} }; bool ans[500100] = { false }; long long int presum[500100]; cin >> n; for (i = 1; i <= n; i++) { cin >> a; pair<int, int> p = { a,i }; tab[i] = p; } sort(tab + 1, tab + n + 1); presum[0] = 0; i = 1; tab[n + 1] = tab[1]; while (tab[i].first == tab[i + 1].first) { //cout << "i=" << i << '\n'; presum[i] = presum[i - 1] + tab[i].first; i++; } //printf("%d != %d\n", tab[i].first, tab[i + 1].first); int smallest = i; // cout << "smallest established " << smallest<<'\n'; //we're on the last smallest fish while (i <= n) { presum[i] = presum[i - 1] + tab[i].first; i++; } for (i = n; i > smallest; i--) { if (presum[i] > tab[i + 1].first) { ans[tab[i].second] = true; } else { break; } } /* for (i = 1; i <= n; i++) { printf("%d ", tab[i].first); } cout << '\n' << '\n'; for (i = 1; i <= n; i++) { printf("%d ", presum[i]); } cout << '\n' << '\n';*/ for (i = 1; i <= n; i++) { if (ans[i] == true) { cout << "T"; } else { cout << "N"; } } cout << '\n'; return 0; }
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 | #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include<algorithm> using namespace std; int main() { std::ios_base::sync_with_stdio(false); long long int i, n, k, a; pair<int, int> tab[500100] = { {0,0} }; bool ans[500100] = { false }; long long int presum[500100]; cin >> n; for (i = 1; i <= n; i++) { cin >> a; pair<int, int> p = { a,i }; tab[i] = p; } sort(tab + 1, tab + n + 1); presum[0] = 0; i = 1; tab[n + 1] = tab[1]; while (tab[i].first == tab[i + 1].first) { //cout << "i=" << i << '\n'; presum[i] = presum[i - 1] + tab[i].first; i++; } //printf("%d != %d\n", tab[i].first, tab[i + 1].first); int smallest = i; // cout << "smallest established " << smallest<<'\n'; //we're on the last smallest fish while (i <= n) { presum[i] = presum[i - 1] + tab[i].first; i++; } for (i = n; i > smallest; i--) { if (presum[i] > tab[i + 1].first) { ans[tab[i].second] = true; } else { break; } } /* for (i = 1; i <= n; i++) { printf("%d ", tab[i].first); } cout << '\n' << '\n'; for (i = 1; i <= n; i++) { printf("%d ", presum[i]); } cout << '\n' << '\n';*/ for (i = 1; i <= n; i++) { if (ans[i] == true) { cout << "T"; } else { cout << "N"; } } cout << '\n'; return 0; } |