88pts求组
查看原帖
88pts求组
803329
chenxuanling楼主2024/10/25 20:55
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
typedef long long ll;
ll n,b[N],op=1,l[N],vis[N];
struct node{
	ll a,id;
	char s;
}e[N];
inline bool cmp(node w,node b){
	return w.a<b.a;
} 
inline bool dmp(node w,node b){
	return w.id<b.id;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>e[i].a;
		e[i].id=i;
	}
	sort(e+1,e+n+1,cmp);
	for(int i=1;i<=n;i++){
		if(e[i].a==e[i+1].a){
			vis[i]=vis[i+1]=1;
		}
		else break;
	}
	for(int i=1;i<=n;i++){
		b[i]=b[i-1]+e[i].a;
		if(b[i]<e[i+1].a){
			b[i]+=l[i-1];
			l[i]=0;
			for(int j=op;j<=i;j++){
				e[j].s='N';				
			}
			op=i+1;
		}
		if(b[i]==e[i+1].a){
			for(int j=op;j<=i;j++){
				e[j].s='N';
			}
			op=i+1;
			if(vis[i]){
				b[i]-=e[i+1].a;
				l[i]=l[i-1]+e[i].a;
			}
		}
	}
	for(int i=op;i<=n;i++){
		e[i].s='T';
	}
	sort(e+1,e+n+1,dmp);
	for(int i=1;i<=n;i++){
		cout<<e[i].s;
	}
	return 0;
}
2024/10/25 20:55
加载中...