제출 #1326452

#제출 시각아이디문제언어결과실행 시간메모리
1326452Mauricio_CruzSnowball (JOI21_ho_t2)C++20
100 / 100
72 ms8388 KiB
#include <bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() #define srtl(x)sort(all(x)) #define srtg(x)sort((x).begin(),(x).end(),greater<>()) #define rev(x) reverse(all(x)) #define lb(x,y) lower_bound(x.begin(),x.end(),y)-x.begin() #define ub(x,y) upper_bound(x.begin(),x.end(),y)-x.begin() #define ios ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define f first #define s second #define pb push_back #define ins insert #define next next_permutation #define _b __builtin_popcount #define ve vector #define pii pair<int,int> #define piii pair<int,pii> #define vi vector<int> #define vii vector<pii> #define viii vector<piii> #define vvi vector<vi> #define vs vector<string> #define vb vector<bool> #define pV(x)for(auto i:x)cout<<i<<" "; #define geta(a){for(auto &i:a)cin>>i;} #define fr(n)for(int i=0;i<n;i++) #define Fr(n)for(int i=n-1;i>=0;i--) #define suma(a)accumulate(a.begin(),a.end(),0LL) #define br(x){cout<<x<<"\n";return;} #define yesn cout<<"YES\n"; #define yes()br("YES"); #define no(){br("NO")} #define alice() br("Alice"); #define bob() br("Bob"); #define cn continue; #define cint const int #define int long long int mod=1000000007; cint mod1=100000007; cint mod2=998244353; int ax[8]={0,1,0,-1,-1,1,1,-1}; int ay[8]={1,0,-1,0,1,-1,1,-1}; //bool on(int x,int y){return (x>=0&&x<n&&y>=0&&y<m);} //int euc(int a,int b,int c,int d){return abs(a-c)+abs(b-d);} int bp(int x,int y){ if(y==0)return 1; int r=bp(x,y/2); return (y&1)?r*r%mod*x%mod:r*r%mod; } int bpm(int x,int y){ if(y==0)return 1; int r=bp(x,y/2); return (y&1)?r*r*x:r*r; } cint N=200006; int F[N+1],I[N+1]; int cmb(int n,int k){ return (((F[n]*I[k])%mod)*I[n-k])%mod; } int cinn(){ int n; cin>>n; return n; } #define w cinn() void solve(){ int n,m; cin>>n>>m; vi a(n); geta(a); vi der(m+1,0); vi izq(m+1,0); int x=0; for(int i=1;i<=m;i++){ int val=w; x+=val; der[i]=max(der[i-1],x); izq[i]=min(izq[i-1],x); } vi ans(n,0); ans[0]+=abs(izq[m]); ans[n-1]+=der[m]; for(int i=0;i+1<n;i++){ int dis=a[i+1]-a[i]; int mi=-1,ma=m+1,me; int y=0,r=-1; while(ma-mi!=1){ me=(ma+mi)/2; int de=der[me],iz=izq[me]; if(a[i]+de<=a[i+1]+iz){ r=max(r,me); mi=me; } else ma=me; } ans[i]+=der[r]; ans[i+1]+=abs(izq[r]); if(r==m)continue; int esp=dis-(der[r]+abs(izq[r])); if(der[r]!=der[r+1]){ ans[i]+=esp; } else ans[i+1]+=esp; } for(int i=0;i<n;i++)cout<<ans[i]<<"\n"; } int32_t main(){ ios; int t=1; //cin>>t; /* F[0]=1; for(int i=1;i<=N;i++){ F[i]=(i*F[i-1])%mod; } I[N]=(bp(F[N],mod-2))%mod; for(int i=N-1;i>=0;i--){ I[i]=(I[i+1]*(i+1))%mod; } //*/ while(t--){ solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...