2023 rcpc
This commit is contained in:
108
2023/rcpc/d2/editorial/h-ai-thoughts-590.cpp
Normal file
108
2023/rcpc/d2/editorial/h-ai-thoughts-590.cpp
Normal file
@@ -0,0 +1,108 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
#define int long long
|
||||
|
||||
const int inf = 1e18;
|
||||
|
||||
int n;
|
||||
|
||||
struct gand
|
||||
{
|
||||
int x,y,val;
|
||||
};
|
||||
|
||||
gand a[200005];
|
||||
int max_pxpy[200005];
|
||||
int max_pxmy[200005];
|
||||
int max_mxpy[200005];
|
||||
int max_mxmy[200005];
|
||||
int max_px[200005];
|
||||
int max_py[200005];
|
||||
int max_mx[200005];
|
||||
int max_my[200005];
|
||||
|
||||
void prec()
|
||||
{
|
||||
for (int i = 1; i <= 200000; i++)
|
||||
max_pxpy[i] = max_pxmy[i] = max_mxpy[i] = max_mxmy[i] = max_px[i] = max_py[i] = max_mx[i] = max_my[i] = -inf;
|
||||
for (int i = 1; i <= n; i++)
|
||||
{
|
||||
int vl = a[i].val,x = a[i].x,y = a[i].y;
|
||||
max_pxpy[vl] = max(max_pxpy[vl],x + y);
|
||||
max_pxmy[vl] = max(max_pxmy[vl],x - y);
|
||||
max_mxpy[vl] = max(max_mxpy[vl],-x + y);
|
||||
max_mxmy[vl] = max(max_mxmy[vl],-x - y);
|
||||
max_px[vl] = max(max_px[vl],x);
|
||||
max_py[vl] = max(max_py[vl],y);
|
||||
max_mx[vl] = max(max_mx[vl],-x);
|
||||
max_my[vl] = max(max_my[vl],-y);
|
||||
}
|
||||
}
|
||||
|
||||
signed main()
|
||||
{
|
||||
ios_base::sync_with_stdio(false);
|
||||
cin.tie(NULL);
|
||||
cout.tie(NULL);
|
||||
cin >> n;
|
||||
for (int i = 1; i <= n; i++)
|
||||
cin >> a[i].x >> a[i].y >> a[i].val;
|
||||
prec();
|
||||
int t;
|
||||
cin >> t;
|
||||
while (t--)
|
||||
{
|
||||
int m;
|
||||
cin >> m;
|
||||
vector<int>v(m + 1);
|
||||
vector<vector<int>>dp(m + 1);
|
||||
for (int i = 1; i <= m; i++)
|
||||
cin >> v[i];
|
||||
for (int i = 1; i <= m; i++)
|
||||
dp[i].resize(5);
|
||||
dp[1][0] = 0;
|
||||
dp[1][1] = max_pxpy[v[1]];
|
||||
dp[1][2] = max_pxmy[v[1]];
|
||||
dp[1][3] = max_mxpy[v[1]];
|
||||
dp[1][4] = max_mxmy[v[1]];
|
||||
//cout << dp[1][0] << ' ' << dp[1][1] << ' ' << dp[1][2] << ' ' << dp[1][3] << ' ' << dp[1][4] << '\n';
|
||||
for (int i = 2; i <= m; i++)
|
||||
{
|
||||
int val0 = -inf;
|
||||
val0 = max(val0,dp[i - 1][1] + max_mxmy[v[i]]);
|
||||
val0 = max(val0,dp[i - 1][2] + max_mxpy[v[i]]);
|
||||
val0 = max(val0,dp[i - 1][3] + max_pxmy[v[i]]);
|
||||
val0 = max(val0,dp[i - 1][4] + max_pxpy[v[i]]);
|
||||
dp[i][0] = val0;
|
||||
int val1 = -inf;
|
||||
val1 = max(val1,dp[i - 1][1]);
|
||||
val1 = max(val1,dp[i - 1][2] + 2 * max_py[v[i]]);
|
||||
val1 = max(val1,dp[i - 1][3] + 2 * max_px[v[i]]);
|
||||
val1 = max(val1,dp[i - 1][4] + 2 * max_pxpy[v[i]]);
|
||||
dp[i][1] = val1;
|
||||
int val2 = -inf;
|
||||
val2 = max(val2,dp[i - 1][1] + 2 * max_my[v[i]]);
|
||||
val2 = max(val2,dp[i - 1][2]);
|
||||
val2 = max(val2,dp[i - 1][3] + 2 * max_pxmy[v[i]]);
|
||||
val2 = max(val2,dp[i - 1][4] + 2 * max_px[v[i]]);
|
||||
dp[i][2] = val2;
|
||||
int val3 = -inf;
|
||||
val3 = max(val3,dp[i - 1][1] + 2 * max_mx[v[i]]);
|
||||
val3 = max(val3,dp[i - 1][2] + 2 * max_mxpy[v[i]]);
|
||||
val3 = max(val3,dp[i - 1][3]);
|
||||
val3 = max(val3,dp[i - 1][4] + 2 * max_py[v[i]]);
|
||||
dp[i][3] = val3;
|
||||
int val4 = -inf;
|
||||
val4 = max(val4,dp[i - 1][1] + 2 * max_mxmy[v[i]]);
|
||||
val4 = max(val4,dp[i - 1][2] + 2 * max_mx[v[i]]);
|
||||
val4 = max(val4,dp[i - 1][3] + 2 * max_my[v[i]]);
|
||||
val4 = max(val4,dp[i - 1][4]);
|
||||
dp[i][4] = val4;
|
||||
//cout << dp[i][0] << ' ' << dp[i][1] << ' ' << dp[i][2] << ' ' << dp[i][3] << ' ' << dp[i][4] << '\n';
|
||||
}
|
||||
cout << dp[m][0] << '\n';
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user