133 lines
3.5 KiB
C++
133 lines
3.5 KiB
C++
#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;
|
|
}
|
|
|
|
/**
|
|
0 -> nimic
|
|
1 -> +x+y
|
|
2 -> +x-y
|
|
3 -> -x+y
|
|
4 -> -x-y
|
|
**/
|
|
|
|
/**
|
|
10
|
|
4 7 15670
|
|
19 2 33967
|
|
-10 -4 25333
|
|
-3 6 57312
|
|
2 -6 191291
|
|
0 -8 152287
|
|
-1 4 161306
|
|
17 1 177377
|
|
3 -20 74203
|
|
20 -5 37760
|
|
1
|
|
5 152287 74203 74203 74203 37760
|
|
**/
|