#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m,mx;
#define y1 y11
#define y2 y22
// #define int long long
#define ll long long
struct node{
int x,y,w,id,op;
bool operator < (const node &b) const
{
if(x!=b.x) return x<b.x;
return id<b.id;
}
void print()
{
cout<<x<<' '<<y<<" "<<w<<" "<<id<<" "<<op<<endl;
}
}a[N*6];
struct Q{
int x1,y1,x2,y2;
}q[N];
vector<int>x,y;
inline void ch(int &x,vector<int>ve)
{
x=lower_bound(ve.begin(),ve.end(),x)-ve.begin()+2;
}
int k;
ll ans[N];
ll c[N*4];
inline int lowbit(int x)
{
return x&(-x);
}
inline void add(int x,int y)
{
for(int i=x;i<=mx;i+=lowbit(i)) c[i]+=y;
}
inline ll query(int x)
{
ll res=0;
for(int i=x;i;i-=lowbit(i)) res+=c[i];
return res;
}
signed main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].w);a[i].id=0;
x.push_back(a[i].x),y.push_back(a[i].y);
}
for(int i=1;i<=m;i++)
{
scanf("%d%d%d%d",&q[i].x1,&q[i].y1,&q[i].x2,&q[i].y2);
x.push_back(q[i].x1),x.push_back(q[i].x2);
y.push_back(q[i].y1),y.push_back(q[i].y2);
}
sort(x.begin(),x.end()),sort(y.begin(),y.end());
x.erase(unique(x.begin(),x.end()),x.end());
y.erase(unique(y.begin(),y.end()),y.end());
mx=2*(x.size()+y.size())+2;
// cout<<mx<<endl;
for(int i=1;i<=n;i++) ch(a[i].x,x),ch(a[i].y,y);
for(int i=1;i<=m;i++) ch(q[i].x1,x),ch(q[i].y1,y),ch(q[i].x2,x),ch(q[i].y2,y);
k=n;
for(int i=1;i<=m;i++) a[++k]={q[i].x1-1,q[i].y1-1,0,i,1},a[++k]={q[i].x2,q[i].y2,0,i,1},a[++k]={q[i].x2,q[i].y1-1,0,i,-1},a[++k]={q[i].x1-1,q[i].y2,0,i,-1};
// cout<<k<<endl;
sort(a+1,a+k+1);
for(int i=1;i<=k;i++)
{
node &t=a[i];
if(t.op==0) add(t.y,t.w);
else
{
// t.print();
ans[t.id]+=t.op*query(t.y);
// cout<<ans[t.id]<<endl;
}
}
for(int i=1;i<=m;i++) printf("%lld\n",ans[i]);
}
感觉是一个 log 的,不知道为什么 T 翻了
救救孩子