#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1000015;
struct node
{
int x;
int y;
int a;
}z[N];
bool cmp(node z1,node z2)
{
return z1.y>z2.y;
}
int X;
struct poi
{
int k;
int y;
int sum()const
{
return -k*X+y;
}
bool operator<(const poi &p1)const
{
return sum()<=p1.sum();
}
};
deque<poi> q;
signed main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)
scanf("%lld%lld%lld",&z[i].x,&z[i].y,&z[i].a);
// cin>>z[i].x>>z[i].y>>z[i].a;
sort(z+1,z+n+1,cmp);
int ans=0;
for(int i=1;i<=n;i++)
{
X=z[i].y;
while(q.size()>1)
{
poi p1=q.back();
q.pop_back();
poi p2=q.back();
q.pop_back();
if(p2<p1)
{
q.push_back(p1);
}
else
{
q.push_back(p2);
q.push_back(p1);
break;
}
}
poi p3;
p3.k=z[i].x;
if(q.size())
p3.y=q.front().sum()+z[i].x*z[i].y-z[i].a;
else
p3.y=z[i].x*z[i].y-z[i].a;
ans=max(ans,p3.y);
// cout<<"*"<<i<<" "<<p3.k<<" "<<p3.y<<" "<<endl;
q.push_back(p3);
while(q.size()>1)
{
poi p1=q.back();
q.pop_back();
poi p2=q.back();
q.pop_back();
if(p2<p1)
{
q.push_back(p1);
}
else
{
q.push_back(p2);
q.push_back(p1);
break;
}
}
/* for(int i=0;i<q.size();i++)
{
cout<<"deque: "<<X<<" "<<i<<" "<<q[i].k<<" "<<q[i].y<<" "<<q[i].sum()<<endl;
}*/
}
cout<<ans;
return 0;
}
为什么WAon5,是我对算法理解的有问题吗?