166392025-05-07 17:46:56algoproAutózáscpp17Futási hiba 45/10046ms4240 KiB
// UUID: 026eef6b-6f5f-4840-8776-dfc04f99b63b
#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){
    x=x+1;
    int res=0;
    while (x>0){
        res+=tree[x];
        x-=f(x);
    }
    return res;
}

void add(int x, int val){
    x=x+1;
    while (x<maxn){
        tree[x]+=val;
        x+=f(x);
    }
}

struct kut {
    int loc;
    int price;
    int ind;

    bool operator> (const kut &other) const {
        return price>other.price;
    }
};

void solve(){
    int n, k;
    cin>>n>>k;
    priority_queue<kut, vector<kut>, greater<kut>> q;
    int cur=0;
    vector<kut> ans;
    int loc=0;
    ll total=0;
    for (int i=0;i<n;i++){
        int a,b;
        cin>>a>>b;
        q.push({loc, b, i});
        loc+=a;
        cur-=a;
        while (cur<0){
            while (!ans.empty() && !q.empty() && q.top().loc<ans.back().loc) q.pop();
			if (q.size()==0) {
				exit(0);
			}
            auto v = q.top();
            q.pop();
            int space = k+v.loc-get(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;
            }
        }
    }
    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();
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base45/100
1Elfogadva0/02ms1588 KiB
2Futási hiba0/021ms3076 KiB
3Elfogadva5/52ms1780 KiB
4Elfogadva5/52ms1588 KiB
5Elfogadva5/52ms1592 KiB
6Elfogadva5/52ms1588 KiB
7Elfogadva5/52ms1780 KiB
8Elfogadva5/52ms1772 KiB
9Elfogadva5/52ms1588 KiB
10Elfogadva5/52ms1588 KiB
11Elfogadva5/529ms3208 KiB
12Futási hiba0/58ms2072 KiB
13Futási hiba0/535ms4240 KiB
14Futási hiba0/528ms4172 KiB
15Futási hiba0/546ms3816 KiB
16Futási hiba0/541ms3564 KiB
17Futási hiba0/534ms3304 KiB
18Futási hiba0/532ms3356 KiB
19Futási hiba0/534ms3352 KiB
20Futási hiba0/528ms3568 KiB
21Futási hiba0/528ms3552 KiB
22Futási hiba0/528ms3564 KiB