#include <iostream>
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn = 6002, INF = 4e18+9;
struct flower{
ll t, A, B, c;
};
ll cost[2*maxn][maxn][2];
ll f[maxn][maxn];
void sub1(int n, int q, vector<flower> a){
int N = 1000;
auto chmax = [&](ll &a, ll b) -> void{
a = max(a, b);
};
for(int i = 1; i <= n; i++){
ll A = a[i].A*2, B = a[i].B*2;
if(A == B) continue;
if(A < B){
int y = a[i].t*2;
for(int j = A; j < B; j++){
chmax(cost[j][y][1], a[i].c);
y++;
}
}else{
int y = a[i].t*2;
for(int j = A; j > B; j--){
chmax(cost[j][y][0], a[i].c);
y++;
}
}
}
for(int j = 2*N; j >= 1; j--){
for(int i = 1; i <= N; i++){
chmax(f[i][j], f[i-1][j+1]+cost[i][j][0]);
chmax(f[i][j], f[i][j+1]);
chmax(f[i][j], f[i+1][j+1]+cost[i][j][1]);
}
}
for(int i = 1; i <= q; i++){
ll x, y;
cin >> y >> x;
if(y > 3000){
cout << 0 << "\n";
continue;
}
cout << f[x*2][y*2]/2 << "\n";
}
}
void solve(){
int n, q;
cin >> n >> q;
vector<flower> a(n+1);
bool issub1 = true;
for(int i = 1; i <= n; i++){
cin >> a[i].t >> a[i].A >> a[i].B >> a[i].c;
if(a[i].t > 3000 || a[i].A > 3000 || a[i].B > 3000){
issub1 = false;
}
}
if(issub1){
sub1(n, q, a);
return;
}
sub1(n, q, a);
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
//freopen("MOTOR.inp", "r", stdin);
//freopen("MOTOR.out", "w", stdout);
solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |