제출 #1040405

#제출 시각아이디문제언어결과실행 시간메모리
1040405vjudge1금 캐기 (IZhO14_divide)C++14
100 / 100
67 ms10348 KiB
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; long long a[n+2],b[n+1],c[n+1],d[n+1],f[n+1],g[n+1]; int h[n+1]; for(int i=0;i<n;i++) { cin >> a[i+1] >> b[i+1] >> c[i+1]; } a[n+1]=a[n];a[0]=0;b[0]=0;c[0]=a[1]-a[0];d[0]=c[0];g[0]=0;f[0]=0; for(int i=1;i<=n;i++) { g[i]=g[i-1]+b[i]; d[i]=c[i]+d[i-1]; f[i]=d[i]-a[i+1]; } vector<pair<long long,int> > v; for(int i=0;i<=n;i++) { v.push_back({f[i],i}); } sort(v.begin(),v.end());/* for(int i=0;i<=n;i++) { cout << v[i].first << ' ' << v[i].second << '\n'; } cout << endl; /**/ long long res=0; h[0]=v[0].second; for(int i=1;i<=n;i++) h[i]=min(h[i-1],v[i].second); for(int i=0;i<=n;i++) { long long x=v[i].first+a[v[i].second+1]-a[v[i].second]; //cout << x << ' ' ; int l=0,r=i-1,ans=1000000000; while(l<=r) { int g=(l+r)/2; if(v[g].first<=x) { ans=min(ans,h[g]); l=g+1; } else r=g-1; } l=i+1;r=n; while(l<=r) { int g=(l+r)/2; if(v[g].first<=x) { ans=min(ans,h[g]); l=g+1; } else r=g-1; } //cout << ans << '\n'; if(ans>n||ans>v[i].second) { continue; } res=max(res,g[v[i].second]-g[ans]); } cout << res; return 0; } /* 2 0 4 1 3 5 1 2 1 4 2 3 5 0 */

컴파일 시 표준 에러 (stderr) 메시지

divide.cpp:32:2: warning: "/*" within comment [-Wcomment]
   32 |  /**/
      |
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...