#include<bits/stdc++.h>
using namespace std;
struct node{
long long pre,suf,maxx,sum;
}a[400001];
void build(){
memset(a,0,sizeof(a));
}
void read(int l,int r,int p,int pos,int val){
if(l==r){
long long t=a[p].sum+val;
a[p].pre=a[p].suf=a[p].maxx=a[p].sum=t;
return;
}
int mid=(l+r)>>1;
if(pos<=mid){
read(l,mid,p*2,pos,val);
}
else{
read(mid+1,r,p*2+1,pos,val);
}
a[p].sum=a[p*2].sum+a[p*2+1].sum;
a[p].pre=max(a[p*2].pre,a[p*2].sum+a[p*2+1].pre);
a[p].suf=max(a[p*2+1].suf,a[p*2+1].sum+a[p*2].suf);
a[p].maxx=max(max(a[p*2].maxx,a[p*2+1].maxx),a[p*2].suf+a[p*2+1].pre);
}
node solve(int l,int r,int p,int s,int t){
if(l==r){
return a[p];
}
int mid=(l+r)>>1;
if(mid>=t){
return solve(l,mid,p*2,s,t);
}
if(mid<s){
return solve(mid+1,r,p*2+1,s,t);
}
node x=solve(l,mid,p*2,s,t),y=solve(mid+1,r,p*2+1,s,t),z;
z.sum=x.sum+y.sum;
z.pre=max(x.pre,x.sum+y.pre);
z.suf=max(y.suf,y.sum+x.suf);
z.maxx=max(max(x.maxx,y.maxx),x.suf+y.pre);
return z;
}
vector<pair<int,int>> op[100002];
struct query{
int s,t,id;
};
vector<query> qr[100001];
long long ans[100001];
int main(){
// freopen("1.in","r",stdin);
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int l,r,x;
scanf("%d%d%d",&l,&r,&x);
op[l].push_back({i,x});
op[r+1].push_back({i,-x});
}
int q;
scanf("%d",&q);
for(int i=1;i<=q;i++){
int k,s,t;
scanf("%d%d%d",&k,&s,&t);
qr[k].push_back({s,t,i});
}
build();
for(int i=1;i<=n;i++){
// if(i==2){
// system("pause");
// }
for(auto x:op[i]){
read(1,m,1,x.first,x.second);
}
for(auto x:qr[i]){
ans[x.id]=solve(1,m,1,x.s,x.t).maxx;
}
}
for(int i=1;i<=q;i++){
printf("%lld\n",ans[i]);
}
return 0;
}
cf上第四个点疯狂TLE,有大佬知道为什么嘛?