제출 #1346321

#제출 시각아이디문제언어결과실행 시간메모리
1346321yc11Snowball (JOI21_ho_t2)C++20
100 / 100
126 ms16180 KiB
#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<int> n1;
vector<int> left1;
vector<int> right1;
vector<int> pleft;
vector<int> pright;
vector<int> no;
signed main(){
    int n,q;
    cin>>n>>q;
    n1.resize(n);
    left1.assign(n,q-1);
    right1.assign(n,q-1);
    pleft.resize(q);
    pright.resize(q);
    no.assign(n,0);
    priority_queue<pair<int,pair<int,int> >, vector<pair<int,pair<int,int> > >, greater<pair<int,pair<int,int> > > > pq;
    for (int i = 0;i<n;i++){
        cin>>n1[i];


    }
    for (int i = 1;i<n;i++){
        pq.push(make_pair(n1[i]-n1[i-1],make_pair(i-1,i)));
      
    }

    int ll = 0;
    int rr = 0;
    int c = 0;
    for (int i = 0;i<q;i++){
        int x;
        cin>>x;
        c+=x;
        if (c>0) rr = max(rr,c);
        else ll = min(ll,c);
        pleft[i] = ll;
        pright[i] = rr;
        while (!pq.empty() and rr-ll>=pq.top().first){

            int a = pq.top().first;
            int b = pq.top().second.first;
            int c = pq.top().second.second;
            pq.pop();
            left1[c] = i;
            right1[b] = i;
            if (x>0){
     

                no[b] += (rr-ll) - a;
            }
            else{
                no[c] += (rr-ll) -a;
            }

        }
    }



    for (int i = 0;i<n;i++){
        cout<<-pleft[left1[i]]+pright[right1[i]]-no[i]<<"\n";
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...