题解:
这道题就很奇妙了啊,据说正解是什么分块来着,不过我贪心算一下贡献就过了。只需要算区间中每个点对答案的贡献就行了
#include<bits/stdc++.h>
using namespace std;
int n,q;
int d[40005];
int l[40005];
int read(){
int num=0,f=1;
char ch=getchar();
while(ch>'9'||ch<'0'){
if(ch=='-'){
f=-1;
}
ch=getchar();
}
while(ch>='0'&&ch<='9'){
num=(num<<1)+(num<<3)+ch-'0';
ch=getchar();
}
return num*f;
}
int main(){
n=read();
q=read();
for(int i=1;i<=n;i++){
d[i]=read();
}
for(int i=1;i<=n;i++){
l[i]=read();
}
int now,ans;
for(int i=1;i<=q;i++){
int L=read(),R=read(),x=read();
now=x;
ans=x;
for(int j=L;j<=R;j++){
if(l[j]<x)now=x;
else{
now=min(now+d[j],l[j]);
}
ans=max(ans,now);
}
printf("%d\n",ans);
}
}