Submission #1180473

#TimeUsernameProblemLanguageResultExecution timeMemory
1180473bbartekSnowball (JOI21_ho_t2)C++20
100 / 100
71 ms9872 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define st first #define nd second #define pb push_back const int maxn = 2e5+7; ll pozycje[maxn]; ll zebrane[maxn]; ll dodatnie[maxn]; ll ujemne[maxn]; ll wynik[maxn]; ll bil[maxn]; int binsearch(int pocz,int kon,ll val){ int sro; while(pocz < kon){ sro = (pocz+kon)/2; if(dodatnie[sro] + ujemne[sro] < val){ pocz = sro+1; } else{ kon = sro; } } return pocz; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n,q; cin>>n>>q; ll a; for(int i=1;i<=n;i++){ cin>>a; pozycje[i] = a; } ll bilans = 0; for(int i=1;i<=q;i++){ cin>>a; bilans += a; bil[i] = bilans; if(bilans > dodatnie[i-1]){ dodatnie[i] = bilans; } else{ dodatnie[i] = dodatnie[i-1]; } if(bilans < -ujemne[i-1]){ ujemne[i] = -bilans; } else{ ujemne[i] = ujemne[i-1]; } } pozycje[0] = -2e18; pozycje[n+1] = 2e18; ll dlu; int x; for(int i=0;i<=n;i++){ dlu = pozycje[i+1] - pozycje[i]; x = binsearch(0,q,dlu); if(bil[x] > bil[x-1]){ wynik[i] += min(dlu-ujemne[x],dodatnie[x]); wynik[i+1] += ujemne[x]; //cout<<i<<" "<<min(dlu-ujemne[x],dodatnie[x])<<" dodatnie\n"; //cout<<i+1<<" "<<ujemne[x]<<" ujemne\n"; } else{ wynik[i] += dodatnie[x]; wynik[i+1] += min(dlu-dodatnie[x],ujemne[x]); //cout<<i<<" "<<dodatnie[x]<<" dodatnie\n"; //cout<<i+1<<" "<<min(dlu-dodatnie[x],ujemne[x])<<" ujemne\n"; } } for(int i=1;i<=n;i++){ cout<<wynik[i]<<"\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...