제출 #1266482

#제출 시각아이디문제언어결과실행 시간메모리
1266482syanvuSnowball (JOI21_ho_t2)C++20
100 / 100
67 ms9800 KiB
#include <bits/stdc++.h> // #include <ext/pb_ds/assoc_container.hpp> // #include <ext/pb_ds/tree_policy.hpp> #define SS ios_base::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr); #pragma optimize("g", on) #pragma GCC optimize("03") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,avx2,mmx,fma,avx,tune=native") #define int long long #define all(x) x.begin(),x.end() #define F first #define S second using namespace std; // using namespace __gnu_pbds; // #define ordered_set tree<int,null_type,less_equal<int>,rb_tree_tag,tree_order_statistics_node_update> const int LG = 21,N = 2e5+1,inf = 1e18,MOD = 998244353; const double eps = 1e-9; int T; void solve() { int n,q; cin>>n>>q; int a[n+1]; for(int i=1;i<=n;i++){ cin>>a[i]; } int mx[q+1]={},mn[q+1]={},w[q+1]={}; int sum=0; for(int i=1;i<=q;i++){ cin>>w[i]; sum+=w[i]; mx[i]=max(mx[i-1],sum); mn[i]=min(mn[i-1],sum); } int ans[n+1]={}; for(int i=1;i<n;i++){ int d = a[i+1] - a[i]; int l = 1, r = q; int res = 0; while(l<=r){ int mid=(l+r)/2; if(mx[mid]-mn[mid]>=d){ r=mid-1; res=mid; } else{ l=mid+1; } } if(!res){ ans[i] += mx[q]; ans[i+1] -= mn[q]; } else{ if(mn[res] != mn[res-1]){ ans[i+1] += d - mx[res-1]; ans[i] += mx[res-1]; } else{ ans[i] += d + mn[res-1]; ans[i+1] -= mn[res-1]; } } } for(int i=1;i<=n;i++){ if(i==1) ans[i] -= mn[q]; if(i==n) ans[i] += mx[q]; cout<<ans[i]<<'\n'; } return; } signed main() { // freopen("deleg.in","r",stdin); // freopen("deleg.out","w",stdout); SS int t = 1; if (T) { cin >> t; } while (t--) { solve(); } } /* */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...