#include <bits/stdc++.h> using namespace std; int n,pocz; struct maciek {long long a; int ind;}; maciek tab[500100]; bool majonez(maciek A, maciek B) { return A.a<B.a; } bool odp[500100]; bool check(int x) { long long sum=0; for(int i=1;i<=x;i++)sum+=tab[i].a; for(int i=x+1;i<=n;i++) { if(sum>tab[i].a) { sum+=tab[i].a; } else return 0; } return 1; } int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>tab[i].a; tab[i].ind=i; } sort(tab+1,tab+n+1,majonez); int l=1; while(pocz==0&&l<=n) { if(tab[l].a!=tab[1].a) { pocz=l; } l++; } if(pocz==0) {for(int i=1;i<=n;i++)cout<<"N"; return 0;} int mid; int kon=n; while(pocz<kon) { mid=(pocz+kon)/2; if(check(mid)==1)kon=mid; else pocz=mid+1; } for(int i=pocz;i<=n;i++)odp[tab[i].ind]=1; for(int i=1;i<=n;i++) { if(odp[i]==0)cout<<"N"; else cout<<"T"; } }
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 | #include <bits/stdc++.h> using namespace std; int n,pocz; struct maciek {long long a; int ind;}; maciek tab[500100]; bool majonez(maciek A, maciek B) { return A.a<B.a; } bool odp[500100]; bool check(int x) { long long sum=0; for(int i=1;i<=x;i++)sum+=tab[i].a; for(int i=x+1;i<=n;i++) { if(sum>tab[i].a) { sum+=tab[i].a; } else return 0; } return 1; } int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>tab[i].a; tab[i].ind=i; } sort(tab+1,tab+n+1,majonez); int l=1; while(pocz==0&&l<=n) { if(tab[l].a!=tab[1].a) { pocz=l; } l++; } if(pocz==0) {for(int i=1;i<=n;i++)cout<<"N"; return 0;} int mid; int kon=n; while(pocz<kon) { mid=(pocz+kon)/2; if(check(mid)==1)kon=mid; else pocz=mid+1; } for(int i=pocz;i<=n;i++)odp[tab[i].ind]=1; for(int i=1;i<=n;i++) { if(odp[i]==0)cout<<"N"; else cout<<"T"; } } |