#include <bits/stdc++.h> using namespace std; struct R { int i; long long w; bool king; }; bool comp_i(R r1, R r2) { return r1.i < r2.i; } bool comp_w(R r1, R r2) { return r1.w < r2.w; } int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<R> v(n); for(int i=0; i<n; ++i) { R r; r.i = i; cin >> r.w; r.king = 0; v[i] = r; } stable_sort(v.begin(), v.end(), comp_w); vector<long long> c(n); c[0] = 0; for(int i=1; i<n; ++i) c[i] = c[i-1] + v[i-1].w; int i2=n; int i1=n-1; while(i1>=0) { while(i1>0 && v.at(i1).w==v.at(i1-1).w) --i1; //cout << i1 << " - " << i2 << endl; if(i1==0) break; if(i2==n) { for(int i=i1; i<i2; ++i) v.at(i).king = true; } else if( c.at(i2) > v.at(i2).w ) { for(int i=i1; i<i2; ++i) v.at(i).king = true; } else break; i2 = i1; --i1; } //for(int i=0; i<n; ++i) cout << setw(4) << c[i] << " "; cout << endl; //for(int i=0; i<n; ++i) cout << setw(4) << v[i].w << " "; cout << endl; //for(int i=0; i<n; ++i) cout << setw(4) << v[i].king << " "; cout << endl; sort(v.begin(), v.end(), comp_i); string res; for(int i=0; i<n; ++i) res += (v.at(i).king?'T':'N'); cout << res << endl; }
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 | #include <bits/stdc++.h> using namespace std; struct R { int i; long long w; bool king; }; bool comp_i(R r1, R r2) { return r1.i < r2.i; } bool comp_w(R r1, R r2) { return r1.w < r2.w; } int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<R> v(n); for(int i=0; i<n; ++i) { R r; r.i = i; cin >> r.w; r.king = 0; v[i] = r; } stable_sort(v.begin(), v.end(), comp_w); vector<long long> c(n); c[0] = 0; for(int i=1; i<n; ++i) c[i] = c[i-1] + v[i-1].w; int i2=n; int i1=n-1; while(i1>=0) { while(i1>0 && v.at(i1).w==v.at(i1-1).w) --i1; //cout << i1 << " - " << i2 << endl; if(i1==0) break; if(i2==n) { for(int i=i1; i<i2; ++i) v.at(i).king = true; } else if( c.at(i2) > v.at(i2).w ) { for(int i=i1; i<i2; ++i) v.at(i).king = true; } else break; i2 = i1; --i1; } //for(int i=0; i<n; ++i) cout << setw(4) << c[i] << " "; cout << endl; //for(int i=0; i<n; ++i) cout << setw(4) << v[i].w << " "; cout << endl; //for(int i=0; i<n; ++i) cout << setw(4) << v[i].king << " "; cout << endl; sort(v.begin(), v.end(), comp_i); string res; for(int i=0; i<n; ++i) res += (v.at(i).king?'T':'N'); cout << res << endl; } |