제출 #1346191

#제출 시각아이디문제언어결과실행 시간메모리
1346191yc11Snowball (JOI21_ho_t2)C++20
0 / 100
1 ms344 KiB
#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<int> n1;
vector<int> n2;
vector<int> pmax;
vector<int> pmin;
int q;
void hi(int x, int y){
    int a = 0;
    int b = q;
    while (b>a){
        int c = (b+a)/2;
        if (n1[x]+pmax[c]>n1[y]+pmin[c]){

            b = c;
        }
        else a = c+1;
    }
    if (n1[b]>0){
        n2[x]+=pmax[b];
        n2[y]+=max((n1[y]-n1[x])-pmax[b]-1,0LL);
    }
    else{
        n2[y]+=-1*pmin[b];
        n2[x]+=max((n1[y]-n1[x])-(-1*pmin[b])-1,0LL);
    }
}
signed main(){
    int n;
    cin>>n>>q;
    n1.resize(n);
    n2.resize(n);
    for (int i = 0;i<n;i++){
        cin>>n1[i];

        n2[i] = 0;
    }
    pmax.resize(n);
    pmin.resize(n);
    pmax[0]=  0;
    pmin[0] = 0;
    int mi=0;
    int ma=0;
    int c = 0;
    for (int i = 0;i<q;i++){
        int w;
        cin>>w;
        c+=w;
        mi = min(mi,c);
        ma = max(ma,c);
        if (i!=0) pmax[i] = max(pmax[i-1],w);
        else pmax[i] = max(w,0LL);
        if (i!=0) pmin[i] = min(pmin[i-1],w);
        else pmin[i] =min(w,0LL);
    }

    for (int i = 0;i<n-1;i++){
        hi(i,i+1);

    }
    n2[0]+=-1*pmin[q-1]-1;
    n2[n-1]+=pmax[q-1]-1;
    for (int i = 0;i<n;i++) cout<<n2[i]<<"\n";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...