#include<iostream>
#include<set>
#include<vector>
#include<map>
using namespace std;
class cmp {
public:
bool operator()(pair<int,int> a, pair<int,int> b) const{
return ((a.first != b.first)?(a.first < b.first):(a.second > b.second));
}
};
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n; cin >> n;
int max_h = 0;
vector<int> hs(n), ks(n);
for(int i = 0; i < n; i++){
cin >> hs[i] >> ks[i];
max_h = max(max_h, hs[i]);
}
set<pair<int, int>, cmp> ord;
for(int i = 0; i < max_h; i++){
ord.insert(pair<int, int>(0, i));
}
int ans = 0;
map<int, bool> occ;
for(int i = n - 1; i >= 0; i--){
occ.clear();
while(ks[i]){
for(auto p = ord.begin(); p != ord.end() && ks[i]; p++){
if((*p).second < hs[i] && !occ[(*p).second]){
ks[i]--;
ans += (*p).first;
occ[(*p).second] = true;
ord.insert(pair<int, int>((*p).first + 1, ((*p).second)));
ord.erase(p);
break;
}
}
}
}
cout << ans;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |