思路就是贪心+模拟
WA了
#include<bits/stdc++.h>
using namespace std;
const int maxn = 500500+10;
int n,S;
long long ans;
int b[maxn];
struct kkk{
long long s;int die;
bool operator < (const kkk& A) const{
return die < A.die;
}
}res[maxn];
int main(){
//freopen("resin.in","r",stdin);
//freopen("resin.out","w",stdout);
cin>>n>>S;
set<kkk> q;
for(int i = 1;i <= n;i++){
cin>>res[i].s>>b[i];
res[i].die = i+S;
q.insert(res[i]);
if((*q.begin()).die == i){
q.erase(*q.begin());
}
int cnt = 0;
while(b[i] > 0&&!q.empty()){
kkk tmp = (*q.begin());
//cout<<tmp.s<<endl;
if(b[i] <= tmp.s){
ans+=b[i];
b[i] = 0;
tmp.s -= b[i];
q.erase(*q.begin());
q.insert(tmp);
break;
}
else if(b[i] > tmp.s){
ans+=tmp.s;
b[i] -= tmp.s;
tmp.s = 0;
q.erase((*q.begin()));
}
}
}
cout<<ans;
return 0;
}