求差错 不知为何RE和WA 感谢!
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
struct node{
long long int a,b,c,d;
}tree[1000001];
long long now,now2,ans1,ans2;
long long int T,n,len; // 手打堆 小根堆
void puts(long long int a,long long int b,long long int c,long long int d)
{
len++;
tree[len].a=a;
tree[len].b=b;
tree[len].c=c;
tree[len].d=d;
long long int son=len;
while(son>1)
{
long long int fa=son/2;
if(tree[fa].a>tree[son].a) swap(tree[fa],tree[son]);
else if(tree[fa].a==tree[son].a && tree[fa].b>tree[son].b) swap(tree[son],tree[fa]);
else break;
son=fa;
}
return ;
}
void get()
{
long long int a=tree[1].a;
long long int b=tree[1].b;
long long int c=tree[1].c;
long long int d=tree[1].d;
tree[1]=tree[len];
len--;
long long int fa=1;
while(fa*2<=len)
{
long long int son=fa*2;
if(tree[son].a>tree[son+1].a && son+1<=len) son++;
else if(tree[son].a==tree[son+1].a && tree[son].b>tree[son+1].b && son+1<=len) son++;
if(tree[fa].a>tree[son].a) swap(tree[fa],tree[son]);
else if(tree[fa].a==tree[a].a && tree[fa].b>tree[son].b) swap(tree[fa],tree[son]);
else break;
fa=son;
}
if(now>=a) now+=c; //如果能穿上
else ans1+=(a-now),now=(a+c); // 不能穿上
if(now2>=b) now2+=d; // 同理
else ans2+=(b-now2),now2=(b+d);
}
int main()
{
scanf("%lld",&T);
scanf("%lld",&n);
for(int i=1;i<=n;i++)
{
long long int a,b,c,d;
scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
puts(a,b,c,d);
}
for(int i=1;i<=n;i++)
get();
printf("%lld %lld",ans1,ans2);
}