#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ios_base::sync_with_stdio(NULL);
cin.tie(NULL);
cout.tie(NULL);
ll n;
cin >> n;
ll suma = 0, ma = 0, mi = pow(10,9);
vector<ll> sums(n);
map<ll, vector<ll>> position;
for(ll i = 0; i < n; i++){
cin >> sums[i];
ma = max(sums[i], ma);
mi = min(sums[i], mi);
if(position.find(sums[i]) == position.end()){
position[sums[i]] = {};
}
position[sums[i]].push_back(i);
}
/*
unordered_set<int> s(sums.begin(), sums.end());
sums.assign(s.begin(), s.end());
n = sums.size();
*/
sort(sums.begin(), sums.end());
string result(n, 'T');
ll j = 0;
while(j < n){
ll el = sums[j];
suma += el;
if(el == mi){
for(ll i = 0; i < position[el].size(); i++){
result[position[el][i]] = 'N';
}
j++;
}
else if(el == ma){
break;
}
else{
ll k = j+1, part_suma = 0;
bool isBigger = false;
while(suma + part_suma > sums[k] && k < n){
part_suma += sums[k];
if(suma + part_suma > ma){
isBigger = true;
break;
}
k++;
}
if(isBigger || k == n) break;
else{
for(ll i = j; i < k; i++){
for(int m = 0; m < position[sums[i]].size(); m++) result[position[sums[i]][m]] = 'N';
}
}
j = k + 1;
suma += part_suma;
}
}
cout << result;
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 | #include<bits/stdc++.h> using namespace std; typedef long long ll; int main(){ ios_base::sync_with_stdio(NULL); cin.tie(NULL); cout.tie(NULL); ll n; cin >> n; ll suma = 0, ma = 0, mi = pow(10,9); vector<ll> sums(n); map<ll, vector<ll>> position; for(ll i = 0; i < n; i++){ cin >> sums[i]; ma = max(sums[i], ma); mi = min(sums[i], mi); if(position.find(sums[i]) == position.end()){ position[sums[i]] = {}; } position[sums[i]].push_back(i); } /* unordered_set<int> s(sums.begin(), sums.end()); sums.assign(s.begin(), s.end()); n = sums.size(); */ sort(sums.begin(), sums.end()); string result(n, 'T'); ll j = 0; while(j < n){ ll el = sums[j]; suma += el; if(el == mi){ for(ll i = 0; i < position[el].size(); i++){ result[position[el][i]] = 'N'; } j++; } else if(el == ma){ break; } else{ ll k = j+1, part_suma = 0; bool isBigger = false; while(suma + part_suma > sums[k] && k < n){ part_suma += sums[k]; if(suma + part_suma > ma){ isBigger = true; break; } k++; } if(isBigger || k == n) break; else{ for(ll i = j; i < k; i++){ for(int m = 0; m < position[sums[i]].size(); m++) result[position[sums[i]][m]] = 'N'; } } j = k + 1; suma += part_suma; } } cout << result; return 0; } |
English