#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"; } } |
English