最近写的程序不知道为什么大子任务是WA,包括前几天的比赛也是,因此求条(真的无法理解小任务为什么能,大任务过不了(还是WA,没骗分)),已经自己造过数据了。
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct st{
char t;
int sum;
int ans;
int xb;
}sd[3000009];
int a[3000009];
signed main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>sd[i].t;
}
for(int i=1;i<=n;i++){
cin>>a[i];
}
int ans;
ans=0;
for(int i=1;i<=n;i++){
if(sd[i].t=='('){
sd[i].ans=sd[i-1].ans;
sd[i].xb=i;
if(!sd[i].sum){
sd[i].sum=sd[i-1].ans-a[i];
}
}else{
if(sd[i-1].xb==0){
sd[i].sum=0;
sd[i].ans=sd[i-1].ans;
continue;
}
sd[i].xb=sd[sd[i-1].xb-1].xb;
sd[i].ans=max(sd[i-1].ans,sd[sd[i-1].xb].sum+a[i]);
sd[i+1].sum=max(sd[i].ans-a[i+1],sd[sd[i-1].xb].sum);
}
}
cout<<sd[n].ans;
return 0;
}