Submission #1175312

#TimeUsernameProblemLanguageResultExecution timeMemory
1175312VMaksimoski008Constellation 3 (JOI20_constellation3)C++20
35 / 100
53 ms42404 KiB
#include <bits/stdc++.h> #define ar array //#define int long long using namespace std; using ll = long long; using pii = pair<int, int>; using pll = pair<ll, ll>; const int mod = 1e9 + 7; const ll inf = 1e18; const int maxn = 1e5 + 5; ll dp[2005][2005]; int n, m, c[maxn], L[maxn], R[maxn], T[maxn][20]; vector<pii> S[maxn]; int mrg(int i, int j) { return c[i] < c[j] ? i : j; } int query(int l, int r) { int k = __lg(r - l + 1); return mrg(T[l][k], T[r-(1<<k)+1][k]); } void dnc(int l, int r, int prv = 0) { if(l > r) return ; int p = query(l, r); if(p < prv) L[prv] = p; if(prv < p) R[prv] = p; dnc(l, p-1, p); dnc(p+1, r, p); } ll f(int r, int mn) { if(!r) return 0; if(dp[r][mn] != -1) return dp[r][mn]; ll ans = 0; for(auto [y, w] : S[r]) if(y >= mn) ans = max(ans, (ll)w + f(L[r], c[r]+1) + f(R[r], c[r]+1)); ans = max(ans, f(L[r], mn) + f(R[r], c[r]+1)); ans = max(ans, f(L[r], c[r]+1) + f(R[r], mn)); return dp[r][mn] = ans; } signed main() { ios_base::sync_with_stdio(false); cout.tie(0); cin.tie(0); cin >> n; memset(dp, -1, sizeof(dp)); for(int i=1; i<=n; i++) { cin >> c[i], c[i] = n - c[i]; T[i][0] = i; } for(int j=1; j<20; j++) for(int i=1; i+(1<<j)-1<=n; i++) T[i][j] = mrg(T[i][j-1], T[i+(1<<(j-1))][j-1]); dnc(1, n); cin >> m; ll sum = 0; for(int i=1; i<=m; i++) { int x, y, w; cin >> x >> y >> w; y = n - y + 1; sum += w; S[x].push_back({ y, w }); } int p = query(1, n); cout << sum - f(p, 0) << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...