2023 rcpc

This commit is contained in:
2024-04-22 16:45:09 +03:00
parent a0ddb657b7
commit 156202ada0
61 changed files with 4462 additions and 0 deletions

View 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;
}