#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define st first
#define nd second
#define pb push_back
const int maxn = 2003;
int H[maxn];
int A[maxn];
int B[maxn];
int lewo[maxn][maxn];
int prawo[maxn][maxn];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n,q;
cin>>n;
int a,b,c;
for(int i=1;i<=n;i++){
cin>>a>>b>>c;
H[i] = a;
A[i] = b;
B[i] = c;
}
for(int i=1;i<=n;i++){
prawo[i][i] = -1;
lewo[i][i] = -1;
for(int j=i+1;j<i+A[i];j++){
prawo[i][j] = -1;
}
for(int j=i+A[i];j<=i+B[i];j++){
prawo[i][j] = prawo[i][j-1];
if(i <= j-A[j] && i >= j-B[j]){
prawo[i][j] = max(prawo[i][j],abs(H[i]-H[j]));
}
}
for(int j=i+B[i]+1;j<=n;j++){
prawo[i][j] = prawo[i][j-1];
}
for(int j=i-A[i]+1;j<=n;j++){
lewo[i][j] = -1;
}
for(int j=i-A[i];j>=i-B[i];j--){
lewo[i][j] = lewo[i][j+1];
if(i >= j+A[j] && i <= j+B[j]){
lewo[i][j] = max(lewo[i][j],abs(H[i]-H[j]));
}
}
for(int j=i-B[i]-1;j>=1;j--){
lewo[i][j] = lewo[i][j+1];
}
}
cin>>q;
int wyn;
while(q--){
cin>>a>>b;
wyn = -1;
for(int i=a;i<=b;i++){
wyn = max(wyn,lewo[i][a]);
wyn = max(wyn,prawo[i][b]);
}
cout<<wyn<<"\n";
}
return 0;
}
# | 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... |