#include<bits/stdc++.h>
using namespace std;
const int N=2e6+10;
int n;char ch[N];vector<int> v;
vector<int> g[N];
map< pair<int,int>,int > mp;int a[N],ans[N];
map<int,int> col;pair<int,int> p[N];int tot=0;
priority_queue<pair<int,int>>Q;
int main(){
scanf("%d",&n);cin>>ch+1;
for(int i=1;i<=2*n;i++){
if(ch[i]=='(') {
if(v.size()==0) g[0].push_back(i);
else g[v.back()].push_back(i);
v.push_back(i);
}else v.pop_back();
}
for(int i=1;i<=n;i++) scanf("%d",&a[i]),col[a[i]]++;
int fl=0;
for(auto it:col) Q.push({it.second,it.first});
queue<int> q;q.push(0);
while(q.size()){
int tp=q.front();q.pop();
vector<int> v;
if(Q.size()<g[tp].size()){printf("NO\n");return 0;}
for(auto it:g[tp]){
ans[it]=Q.top().second;col[ans[it]]--;Q.pop();
if(col[ans[it]]>0) v.push_back(ans[it]);
}
for(auto it:g[tp]){q.push(it);}
for(int i=0;i<v.size();i++){
Q.push({col[v[i]],v[i]});
}
}
if(fl==1) {printf("NO\n");}
else{
printf("YES\n");
for(int i=1;i<=2*n;i++) if(ans[i]!=0) printf("%d ",ans[i]);printf("\n");
}
}
2021牛客暑期多校训练营9 Eyjafjalla
最新推荐文章于 2022-03-14 18:13:28 发布