【HDOJ】2385 Stock

时间:2023-03-08 23:18:19
【HDOJ】2385 Stock

水题,逆向做+优先级队列。

 /* 2385 */
#include <iostream>
#include <sstream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
#include <cassert>
#include <functional>
#include <iterator>
#include <iomanip>
using namespace std;
//#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int>
#define stpii set<pair<int, int> >
#define mpii map<int,int>
#define vi vector<int>
#define pii pair<int,int>
#define vpii vector<pair<int,int> >
#define rep(i, a, n) for (int i=a;i<n;++i)
#define per(i, a, n) for (int i=n-1;i>=a;--i)
#define clr clear
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1 typedef struct node_t {
int p, m; friend bool operator< (const node_t& a, const node_t& b) {
return a.p < b.p;
} } node_t; const int maxn = 1e5+;
node_t nd[maxn];
int X[maxn];
int n; void solve() {
priority_queue<node_t> Q;
node_t d;
int x;
int ans = ; per(i, , n) {
Q.push(nd[i]);
x = X[i];
while (!Q.empty() && x>) {
d = Q.top();
Q.pop();
if (d.m > x) {
d.m -= x;
ans += d.p * x;
x = ;
Q.push(d);
} else {
x -= d.m;
ans += d.p * d.m;
}
}
} printf("%d\n", ans);
} int main() {
ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif int t; scanf("%d", &t);
while (t--) {
scanf("%d", &n);
rep(i, , n)
scanf("%d %d %d", &X[i], &nd[i].p, &nd[i].m);
solve();
} #ifndef ONLINE_JUDGE
printf("time = %d.\n", (int)clock());
#endif return ;
}