제출 #1286842

#제출 시각아이디문제언어결과실행 시간메모리
1286842Faisal_SaqibSnowball (JOI21_ho_t2)C++20
33 / 100
2595 ms2028 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll inf=2e18,N=2e5+10;
ll a[N],qry[N];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    // ll tp=9e18;
    // cout<<tp<<endl;
    ll n,q;
    cin>>n>>q;
    a[0]=-inf;
    a[n+1]=inf;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<=q;i++)
    {
        cin>>qry[i];
        if(i>1)qry[i]+=qry[i-1];
    }
    for(int i=1;i<=n;i++)
    {
        // a[i-1] .. a[i] .. a[i+1]
        // find min x a[i-1]<=x and x<=a[i]
        // time(x+1,i-1)>time(x,i)
        ll l=a[i-1]-1,r=a[i];
        while(l+1<r)
        {
            ll mid=(l+r)/2;
            bool pos=0;
            for(int j=0;j<=q;j++)
            {
                if(a[i]+qry[j]<=mid)
                {
                    pos=1;
                    break;
                }
                if(a[i-1]+qry[j]>=(mid+1))
                {
                    pos=0;
                    break;
                }
            }
            if(pos)
            {
                r=mid;
            }
            else
            {
                l=mid;
            }
        }
        ll st=r;
        l=a[i],r=a[i+1]+1;
        while(l+1<r)
        {
            ll mid=(l+r)/2;
            bool pos=0;
            for(int j=0;j<=q;j++)
            {
                if(a[i]+qry[j]>=mid)
                {
                    pos=1;
                    break;
                }
                if(a[i+1]+qry[j]<=(mid-1))
                {
                    pos=0;
                    break;
                }
            }
            if(pos)
            {
                l=mid;
            }
            else
            {
                r=mid;
            }
        }
        // cout<<"Hola "<<i<<' '<<st<<' '<<l<<endl;
        cout<<l-st<<endl;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...