제출 #1325200

#제출 시각아이디문제언어결과실행 시간메모리
1325200asdfghqwertPotatoes and fertilizers (LMIO19_bulves)C++20
24 / 100
78 ms13240 KiB
//#pragma GCC optimize("O3,Ofast,unroll-loops,fast-math")
//#pragma GCC optimize("O3,Ofast")
#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int INF = 1e9;
int32_t main(){
    ios_base::sync_with_stdio(0);
    int n;cin >> n;
    vector<int> l , r;
    vector<int> arr(n + 1) , best(n + 1);
    for(int i = 1 ; i <= n ;i++){
        int a , b;cin >> a >> b;
        arr[i] = a - b;
        if(arr[i] < 0)best[i] = arr[i];
    }
    for(int i = n ; i >= 1 ; i--)if(arr[i] > 0)r.push_back(i);
    for(int i = 1 ; i <= n ;i++){
        if(arr[i] > 0){
            r.pop_back();
            l.push_back(i);
        }
        int tarr = arr[i];
        while(tarr < 0){
            int can_l = -INF, can_r = INF;
            if(!r.empty())can_r = r.back();
            if(!l.empty())can_l = l.back();
            if(can_r - i < i - can_l){
                int nval = min(0ll , tarr + arr[can_r]);
                arr[can_r] -= nval - tarr;
                best[can_r] += nval - tarr;
                if(arr[can_r] == 0)r.pop_back();
                tarr = nval;
            }else{
                int nval = min(0ll , tarr + arr[can_l]);
                arr[can_l] -= nval - tarr;
                best[can_l] += nval - tarr;
                if(arr[can_l] == 0)l.pop_back();
                tarr = nval;                
            }
        }
    }
    int ans = 0 , pre = 0;
    for(int i = 1 ; i <= n ; i++){
        ans += abs(pre);
        pre += best[i];
    }
    cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...