// UUID: b3702e77-6cc3-49af-9205-b8e857b9cbe6
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define vi vector<int>
#define pii pair<int,int>
const int maxn=3e5+1;
vector<int> tree(maxn);
int f(int x){
return x&(-x);
}
int get(int x){
int res=0;
while (x>=0){
res+=tree[x];
x-=f(x);
}
return res;
}
void add(int x, int val){
while (x<maxn){
tree[x]+=val;
x+=f(x);
}
}
struct kut {
int loc;
int price;
int ind;
auto operator< (kut &other){
return price<other.price;
}
};
void solve(){
int n, k;
cin>>n>>k;
priority_queue<kut> q;
int cur=k;
vector<kut> ans;
int loc=0;
int total=0;
for (int i=0;i<n;i++){
int a,b;
cin>>a>>b;
loc+=a;
cur-=a;
while (cur<0){
while (!ans.empty() && q.top().loc<ans.back().loc) q.pop();
auto v = q.top();
q.pop();
int space = k+get(v.loc)-v.loc;
if (space<=-cur){
cur+=space;
add(v.loc, space);
ans.push_back({v.loc, space, v.ind});
total+=space*v.price;
}
else {
add(v.loc, -cur);
q.push(v);
ans.push_back({v.loc, -cur, v.ind});
total+=(-cur)*v.price;
cur=0;
}
}
q.push({loc, b, i});
}
vector<int> kutak(n);
int cnt=0;
for (auto i : ans){
kutak[i.ind]+=i.price;
}
for (int i : kutak) if (i) cnt++;
cout<<total<<" "<<cnt<<"\n";
for (int i=0;i<n;i++){
if (kutak[i]) cout<<i+1<<" "<<kutak[i]<<"\n";
}
}
int main() {
ios_base::sync_with_stdio(0);cin.tie(0);
int t=1;
//cin>>t;
while (t--){
solve();
}
}
open /var/local/lib/isolate/435/box/a.out: no such file or directory
In file included from /usr/include/c++/12/string:48,
from /usr/include/c++/12/bits/locale_classes.h:40,
from /usr/include/c++/12/bits/ios_base.h:41,
from /usr/include/c++/12/ios:42,
from /usr/include/c++/12/istream:38,
from /usr/include/c++/12/sstream:38,
from /usr/include/c++/12/complex:45,
from /usr/include/c++/12/ccomplex:39,
from /usr/include/x86_64-linux-gnu/c++/12/bits/stdc++.h:54,
from main.cpp:2:
/usr/include/c++/12/bits/stl_function.h: In instantiation of 'constexpr bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = kut]':
/usr/include/c++/12/bits/predefined_ops.h:196:23: required from 'bool __gnu_cxx::__ops::_Iter_comp_val<_Compare>::operator()(_Iterator, _Value&) [with _Iterator = __gnu_cxx::__normal_iterator<kut*, std::vector<kut, std::allocator<kut> > >; _Value = kut; _Compare = std::less<kut>]'
/usr/include/c++/12/bits/stl_heap.h:140:48: required from 'void std::__push_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare&) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<kut*, vector<kut, allocator<kut> > >; _Distance = long int; _Tp = kut; _Compare = __gnu_cxx::__ops::_Iter_comp_val<less<kut> >]'
/usr/include/c++/12/bits/stl_heap.h:216:23: required from 'void std::push_heap(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<kut*, vector<kut, allocator<kut> > >; _Compare = less<kut>]'
/usr/include/c++/12/bits/stl_queue.h:741:16: required from 'void std::priority_queue<_Tp, _Sequence, _Compare>::push(const value_type&) [with _Tp = kut; _Sequence = std::vector<kut, std::allocator<kut> >; _Compare = std::less<kut>; value_type = kut]'
main.cpp:71:23: required from here
/usr/include/c++/12/bits/stl_function.h:408:20: error: no match for 'operator<' (operand types are 'const kut' and 'const kut')
408 | {...