#include <bits/stdc++.h> using namespace std; const int N = 5e5 + 5; int n; int tab[N]; long long pref[N]; char res[N]; bool cmp(int a, int b) { return tab[a] < tab[b]; } int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &tab[i]); } vector<int> order; for (int i = 1; i <= n; i++) { order.push_back(i); } sort(order.begin(), order.end(), cmp); for (int i = 0; i < n; i++) { pref[i + 1] = pref[i] + tab[order[i]]; } for (int i = n - 1; i >= 0; i--) { if ((i < n - 1 && res[order[i + 1] - 1] == 'N') || tab[order[i]] == tab[order[0]] || (i < n - 1 && pref[i + 1] <= tab[order[i + 1]])) { res[order[i] - 1] = 'N'; } else { // cout << "siema " << order[i] << " " << pref[i + 1] << " " << tab[order[i + 1]] << " " << i << " " << order[i + 1] << " " << res[order[i + 1]<< endl; res[order[i] - 1] = 'T'; } } printf("%s\n", res); }
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 | #include <bits/stdc++.h> using namespace std; const int N = 5e5 + 5; int n; int tab[N]; long long pref[N]; char res[N]; bool cmp(int a, int b) { return tab[a] < tab[b]; } int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &tab[i]); } vector<int> order; for (int i = 1; i <= n; i++) { order.push_back(i); } sort(order.begin(), order.end(), cmp); for (int i = 0; i < n; i++) { pref[i + 1] = pref[i] + tab[order[i]]; } for (int i = n - 1; i >= 0; i--) { if ((i < n - 1 && res[order[i + 1] - 1] == 'N') || tab[order[i]] == tab[order[0]] || (i < n - 1 && pref[i + 1] <= tab[order[i + 1]])) { res[order[i] - 1] = 'N'; } else { // cout << "siema " << order[i] << " " << pref[i + 1] << " " << tab[order[i + 1]] << " " << i << " " << order[i + 1] << " " << res[order[i + 1]<< endl; res[order[i] - 1] = 'T'; } } printf("%s\n", res); } |