#include <bits/stdc++.h>
using namespace std;
vector <pair <long,long> > sumy;
bool moze2[500007];
long long n;
long long funkcja (int indeks){
long long wartosc = sumy[indeks].first;
for (int i = 0; i < indeks; ++i){
if (sumy[i].first >= wartosc){
break;
}
wartosc += sumy[i].first;
}
for (int i = indeks+1; i < n; ++i){
if (sumy[i].first >= wartosc){
break;
}
wartosc += sumy[i].first;
}
return wartosc;
}
int binsearch(int p, int k, long long w){
while(p != k){
long long sr = (p+k+1)/2;
if (funkcja(sr) <= w){
p = sr;
}
else{
k = sr-1;
}
}
if (funkcja(k) <= w){
k++;
}
return k;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cin >> n;
if (n == 1){
cout << "T";
return 0;
}
long long a;
for (int i = 0; i < n; ++i){
cin >> a;
sumy.push_back(make_pair(a,i));
}
sort (sumy.begin(), sumy.end());
int gdzie = binsearch(0, n-1, sumy[n-1].first);
if (funkcja(gdzie) > sumy[n-1].first){
for (int i = 0; i < gdzie; ++i){
moze2[sumy[i].second] = false;
}
for (int i = gdzie; i < n; ++i){
moze2[sumy[i].second] = true;
}
}
for (int i = 0; i < n; ++i){
if (moze2[i] == true){
cout << "T";
}
else{
cout << "N";
}
}
}
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 | #include <bits/stdc++.h> using namespace std; vector <pair <long,long> > sumy; bool moze2[500007]; long long n; long long funkcja (int indeks){ long long wartosc = sumy[indeks].first; for (int i = 0; i < indeks; ++i){ if (sumy[i].first >= wartosc){ break; } wartosc += sumy[i].first; } for (int i = indeks+1; i < n; ++i){ if (sumy[i].first >= wartosc){ break; } wartosc += sumy[i].first; } return wartosc; } int binsearch(int p, int k, long long w){ while(p != k){ long long sr = (p+k+1)/2; if (funkcja(sr) <= w){ p = sr; } else{ k = sr-1; } } if (funkcja(k) <= w){ k++; } return k; } int main(){ ios_base::sync_with_stdio(0); cin.tie(NULL); cin >> n; if (n == 1){ cout << "T"; return 0; } long long a; for (int i = 0; i < n; ++i){ cin >> a; sumy.push_back(make_pair(a,i)); } sort (sumy.begin(), sumy.end()); int gdzie = binsearch(0, n-1, sumy[n-1].first); if (funkcja(gdzie) > sumy[n-1].first){ for (int i = 0; i < gdzie; ++i){ moze2[sumy[i].second] = false; } for (int i = gdzie; i < n; ++i){ moze2[sumy[i].second] = true; } } for (int i = 0; i < n; ++i){ if (moze2[i] == true){ cout << "T"; } else{ cout << "N"; } } } |
English