各位大佬帮忙看看!
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 5;
int n, dp[N], q[N];
struct node{
int c, w;
}a[N];
bool cmp(node x, node y){
if(x.c != y.c) return x.c < y.c;
return x.w > y.w;
}
int fz(int x, int y){ return dp[x] - dp[y]; }
int fm(int x, int y){ return a[y + 1].w - a[x + 1].w; }
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i].c >> a[i].w;
sort(a + 1, a + n + 1, cmp);
int cnt = 1;
for(int i = 2; i <= n; i++){
if(a[cnt].w <= a[i].w) a[cnt] = a[i];
else a[++cnt] = a[i];
}
n = cnt;
int l = 1, r = 0;
q[++r] = 0;
for(int i = 1; i <= n; i++){
while(l + 1 <= r && fz(q[l + 1], q[l]) <= a[i].c * fm(q[l + 1], q[l])) l++;
int j = q[l];
dp[i] = dp[j] + a[j + 1].w * a[i].c;
while(l + 1 <= r && fz(i, q[r]) * fm(q[r], q[r - 1]) <= fz(q[r], q[r - 1]) * fm(i, q[r])) r--;
q[++r] = i;
}
cout << dp[n];
return 0;
}