#include <algorithm> #include <cstdio> #include <vector> int main() { int N; scanf("%d", &N); std::vector<unsigned> weights(N); for (int i=0; i<N; ++i) { scanf("%u", &weights[i]); } std::vector<unsigned> sorted_weights(weights); std::sort(sorted_weights.begin(), sorted_weights.end()); std::vector<unsigned long> cumulative(N); cumulative[0] = 0; unsigned long count_same_weight = 1; for (int i=1; i<N; ++i) { if (sorted_weights[i-1] == sorted_weights[i]) { cumulative[i] = cumulative[i-1]; ++count_same_weight; } else { cumulative[i] = cumulative[i-1] + sorted_weights[i-1] * count_same_weight; count_same_weight = 1; } } for (int i=0; i<N; ++i) { int old_index = std::lower_bound(sorted_weights.begin(), sorted_weights.end(), weights[i]) - sorted_weights.begin(); unsigned long new_weight = weights[i] + cumulative[old_index]; while (true) { int new_index = std::lower_bound(sorted_weights.begin(), sorted_weights.end(), new_weight) - sorted_weights.begin(); if (new_index == N) { putchar('T'); break; } if (new_index <= old_index) { putchar('N'); break; } new_weight = cumulative[new_index]; old_index = new_index; } } putchar('\n'); }
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 | #include <algorithm> #include <cstdio> #include <vector> int main() { int N; scanf("%d", &N); std::vector<unsigned> weights(N); for (int i=0; i<N; ++i) { scanf("%u", &weights[i]); } std::vector<unsigned> sorted_weights(weights); std::sort(sorted_weights.begin(), sorted_weights.end()); std::vector<unsigned long> cumulative(N); cumulative[0] = 0; unsigned long count_same_weight = 1; for (int i=1; i<N; ++i) { if (sorted_weights[i-1] == sorted_weights[i]) { cumulative[i] = cumulative[i-1]; ++count_same_weight; } else { cumulative[i] = cumulative[i-1] + sorted_weights[i-1] * count_same_weight; count_same_weight = 1; } } for (int i=0; i<N; ++i) { int old_index = std::lower_bound(sorted_weights.begin(), sorted_weights.end(), weights[i]) - sorted_weights.begin(); unsigned long new_weight = weights[i] + cumulative[old_index]; while (true) { int new_index = std::lower_bound(sorted_weights.begin(), sorted_weights.end(), new_weight) - sorted_weights.begin(); if (new_index == N) { putchar('T'); break; } if (new_index <= old_index) { putchar('N'); break; } new_weight = cumulative[new_index]; old_index = new_index; } } putchar('\n'); } |