求hack
查看原帖
求hack
535407
Retr0_Gu楼主2024/10/30 18:21
#include <bits/stdc++.h>
using namespace std;

const int N = 4e6 + 2;

char s[N];

int a[N], j[N];

long long dp[N];

int main(){
    int n;
    scanf("%d%s", &n, s + 1);
    stack<int> st;
    for (int i = 1; i <= n; i++)
        scanf("%d", &a[i]);
    for (int i = 1; i <= n; i++){
        dp[i] = dp[i - 1];
        if (!st.empty() && s[i] == ')'){
            j[i] = st.top(), st.pop();
            if (j[j[i] - 1] && a[j[i] - 1] - a[j[i]] < 0) j[i] = j[j[i] - 1];
            dp[i] = max(dp[i], dp[j[i] - 1] + a[i] - a[j[i]]);
        }
        else if (s[i] == '(') st.push(i);
    }
    printf("%lld", dp[n]);
    return 0;
}
2024/10/30 18:21
加载中...