#include <bits/stdc++.h> #define ll long long int using namespace std; const int MAXN = 5e5; ll n,start=MAXN+4; struct Ryba{ ll m=0; ll nr=0; }; vector<Ryba> ryby(1); ll pref_l[MAXN+10]; bool isKing[MAXN+10]; void createSumyPref(){ for(int i=1;i<=n;++i) pref_l[i]=ryby[i].m+pref_l[i-1]; } void wypiszTesty(){ cout<<"\nposortowane\n"; for(auto [m,nr] : ryby) cout<<"masa : "<<m<<" , nr : "<<nr<<"\n"; for(int i=0;i<=n;++i) cout<<setw(2)<<pref_l[i]<<" "; cout<<"\n"<<start<<"\n"; } void wypiszKingow(){ for(int i=1;i<=n;++i) cout<<(isKing[i] ? 'T' : 'N'); } void znajdzKingow(){ isKing[n+1]=1; for(int i=n;i>=start;--i) if(i==n) isKing[ryby[i].nr]=1; else if(pref_l[i] > ryby[i+1].m && isKing[ ryby[i+1].nr ]==1) isKing[ryby[i].nr]=1; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; ll pom; for(int i=1;i<=n;++i){ cin>>pom; ryby.push_back({pom,i}); } sort(ryby.begin(), ryby.end(), [](Ryba v1, Ryba v2){return v1.m<v2.m;}); createSumyPref(); // wypiszTesty(); for(int i=2;i<=n;++i) if(ryby[i].m!=ryby[i-1].m){ start=i; break; } znajdzKingow(); wypiszKingow(); 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 | #include <bits/stdc++.h> #define ll long long int using namespace std; const int MAXN = 5e5; ll n,start=MAXN+4; struct Ryba{ ll m=0; ll nr=0; }; vector<Ryba> ryby(1); ll pref_l[MAXN+10]; bool isKing[MAXN+10]; void createSumyPref(){ for(int i=1;i<=n;++i) pref_l[i]=ryby[i].m+pref_l[i-1]; } void wypiszTesty(){ cout<<"\nposortowane\n"; for(auto [m,nr] : ryby) cout<<"masa : "<<m<<" , nr : "<<nr<<"\n"; for(int i=0;i<=n;++i) cout<<setw(2)<<pref_l[i]<<" "; cout<<"\n"<<start<<"\n"; } void wypiszKingow(){ for(int i=1;i<=n;++i) cout<<(isKing[i] ? 'T' : 'N'); } void znajdzKingow(){ isKing[n+1]=1; for(int i=n;i>=start;--i) if(i==n) isKing[ryby[i].nr]=1; else if(pref_l[i] > ryby[i+1].m && isKing[ ryby[i+1].nr ]==1) isKing[ryby[i].nr]=1; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; ll pom; for(int i=1;i<=n;++i){ cin>>pom; ryby.push_back({pom,i}); } sort(ryby.begin(), ryby.end(), [](Ryba v1, Ryba v2){return v1.m<v2.m;}); createSumyPref(); // wypiszTesty(); for(int i=2;i<=n;++i) if(ryby[i].m!=ryby[i-1].m){ start=i; break; } znajdzKingow(); wypiszKingow(); return 0; } |