| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 671672 | ReLice | 금 캐기 (IZhO14_divide) | C++17 | 66 ms | 51148 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
#define ll long long
#define ld long double
#define int long long
#define pb push_back
#define sz size()
#define fr first
#define sc second
//#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
void fre(string s){freopen((s+".in").c_str(),"r",stdin);freopen((s+".out").c_str(),"w",stdout);}
void start(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
}
const int N=1e6+5;
const int mod=1e9+7;
const int inf=1e7;
vector <ll> x(N),g(N),a(N),pref(N),pref2(N);
map<ll,vector<ll>> mp ;
void solve(){
ll n,i,mx=-1,l,r,k;
cin>>n;
ll suf[n];
for(i=0;i<n;i++) cin>>x[i]>>g[i]>>a[i];
pref[0]=a[0];
pref2[0]=g[0];
for (i=1;i<n;i++){
pref[i]=pref[i-1];
pref[i]+=a[i];
pref2[i]=pref2[i-1]+g[i];
mp[pref[i]].pb(i);
}
suf[n-1]=pref[n-1]-x[n-1];
for(ll i=n-2;i>=0;i--) suf[i] = max(suf[i + 1], pref[i] - x[i]);
for(ll i=0;i<n;i++){
k=-x[i];
if(i>0)k+=pref[i-1];
l=i;
r=n;
while(l+1<r){
ll mid=(l+r)>>1;
if(suf[mid]>=k) l=mid;
else r=mid;
}
mx=max(mx,pref2[l]-pref2[i]+g[i]);
}
cout<<mx<<endl;
}
signed main(){
//fre("divide");
start();
ll t=1;
//cin>>t;
while(t--) solve();
}
컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
