#include <bits/stdc++.h> using namespace std; typedef long long ll; const int SIZE = 500003; int n; bool wynik[SIZE]; vector<pair<int,int> > v; bool czy(int poz){ ll suma = v[poz].first; for(int i = 0; i < n; i++){ if(i != poz && suma <= v[i].first) return false; if(i != poz) suma+=v[i].first; } return true; } int policz_wynik(){ int p = 0, k = n, s = 0; while(p < k){ int s = (p+k)/2; if(czy(s)) k = s; else p = s+1; } return p; } void przypisz_litere(int start){ for(int i = start; i < n; i++) wynik[v[i].second] = true; for(int i = 0; i < n; i++){ if(wynik[i]) cout<<"T"; else cout<<"N"; } cout<<"\n"; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(int i = 0; i < n; i++){ int x; cin>>x; v.push_back({x,i}); } sort(v.begin(),v.end()); przypisz_litere(policz_wynik()); 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 | #include <bits/stdc++.h> using namespace std; typedef long long ll; const int SIZE = 500003; int n; bool wynik[SIZE]; vector<pair<int,int> > v; bool czy(int poz){ ll suma = v[poz].first; for(int i = 0; i < n; i++){ if(i != poz && suma <= v[i].first) return false; if(i != poz) suma+=v[i].first; } return true; } int policz_wynik(){ int p = 0, k = n, s = 0; while(p < k){ int s = (p+k)/2; if(czy(s)) k = s; else p = s+1; } return p; } void przypisz_litere(int start){ for(int i = start; i < n; i++) wynik[v[i].second] = true; for(int i = 0; i < n; i++){ if(wynik[i]) cout<<"T"; else cout<<"N"; } cout<<"\n"; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(int i = 0; i < n; i++){ int x; cin>>x; v.push_back({x,i}); } sort(v.begin(),v.end()); przypisz_litere(policz_wynik()); return 0; } |