mirror of
https://git.sb/baoshuo/OI-codes.git
synced 2024-12-24 18:52:02 +00:00
parent
9a5c89eea8
commit
2b49a690f6
76
S2OJ/790/790.cpp
Normal file
76
S2OJ/790/790.cpp
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
#pragma GCC optimize("Ofast")
|
||||||
|
|
||||||
|
#include <bits/stdc++.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
struct node {
|
||||||
|
int t;
|
||||||
|
long long p;
|
||||||
|
|
||||||
|
node() {}
|
||||||
|
node(int _t, long long _p)
|
||||||
|
: t(_t), p(_p) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
int n, t;
|
||||||
|
long long d, p, ans, bat, res[500005], tmp;
|
||||||
|
set<pair<long long, int>> s;
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::ios::sync_with_stdio(false);
|
||||||
|
cin >> n >> t;
|
||||||
|
for (int i = 1; i <= n; i++) {
|
||||||
|
bat -= d;
|
||||||
|
while (d > 0) {
|
||||||
|
while (!s.empty() && !res[s.begin()->second]) {
|
||||||
|
s.erase(s.begin());
|
||||||
|
}
|
||||||
|
tmp = min(d, res[s.begin()->second]);
|
||||||
|
d -= tmp;
|
||||||
|
res[s.begin()->second] -= tmp;
|
||||||
|
while (!s.empty() && res[s.begin()->second] == 0) {
|
||||||
|
s.erase(s.begin());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cin >> d >> p;
|
||||||
|
if (d > t) {
|
||||||
|
cout << -1 << endl;
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
while (!s.empty() && p < s.rbegin()->first) {
|
||||||
|
ans -= res[s.rbegin()->second] * s.rbegin()->first;
|
||||||
|
ans += p * res[s.rbegin()->second];
|
||||||
|
res[i] += res[s.rbegin()->second];
|
||||||
|
res[s.rbegin()->second] = 0;
|
||||||
|
s.erase(--s.end());
|
||||||
|
s.insert(make_pair(p, i));
|
||||||
|
}
|
||||||
|
if (bat < t) {
|
||||||
|
tmp = t - bat;
|
||||||
|
ans += tmp * p;
|
||||||
|
res[i] += tmp;
|
||||||
|
s.insert(make_pair(p, i));
|
||||||
|
bat = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bat -= d;
|
||||||
|
while (d > 0) {
|
||||||
|
while (!s.empty() && (res[s.begin()->second] == 0)) {
|
||||||
|
s.erase(s.begin());
|
||||||
|
}
|
||||||
|
tmp = min(d, res[s.begin()->second]);
|
||||||
|
d -= tmp;
|
||||||
|
res[s.begin()->second] -= tmp;
|
||||||
|
while (!s.empty() && res[s.begin()->second] == 0) {
|
||||||
|
s.erase(s.begin());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (!s.empty()) {
|
||||||
|
ans -= res[s.begin()->second] * s.begin()->first;
|
||||||
|
res[s.begin()->second] = 0;
|
||||||
|
s.erase(s.begin());
|
||||||
|
}
|
||||||
|
cout << ans << endl;
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user