제출 #145328

#제출 시각아이디문제언어결과실행 시간메모리
145328gs18103코알라 (JOI13_koala)C++14
0 / 100
46 ms7532 KiB
#include <bits/stdc++.h> #define LINF 1000000000000000000LL using namespace std; typedef long long ll; ll t[101010]; ll tree[04040], b[101010], dp[101010]; vector <ll> num; ll update(int node, int s, int e, int k, ll val) { if(s == e) return tree[node] = max(tree[node], val); int m = (s+e)>>1; if(k <= m) tree[node] = max(tree[node*2+1], update(node*2, s, m, k, val)); else tree[node] = max(tree[node*2], update(node*2+1, m+1, e, k, val)); return tree[node]; } ll cal(int node, int s, int e, int l, int r) { if(s > r || e < l) return -LINF; if(s >= l && e <= r) return tree[node]; int m = (s+e)>>1; return max(cal(node*2, s, m, l, r), cal(node*2+1, m+1, e, l, r)); } int main() { ios::sync_with_stdio(false); cin.tie(0); ll K, M, D, n; ll A; cin >> K >> M >> D >> A >> n; M -= K; for(int i = 1; i <= n; i++) { cin >> t[i] >> b[i]; t[i] -= K; num.push_back(t[i] % D); } num.push_back(M % D); num.push_back(0); t[n+1] = M; sort(num.begin(), num.end()); for(int i = 0; i < 404040; i++) tree[i] = -LINF; update(1, 0, num.size()-1, 0, 0LL); for(int i = 1; i <= n+1; i++) { int k = lower_bound(num.begin(), num.end(), t[i] % D) - num.begin(); dp[i] = max(cal(1, 0, num.size()-1, 0, k-1) - A, cal(1, 0, num.size()-1, k, num.size()-1)) + b[i]; update(1, 0, num.size()-1, k, dp[i]); } cout << dp[n+1] - A * (M / D); }

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

koala.cpp: In function 'int main()':
koala.cpp:42:42: warning: iteration 2080 invokes undefined behavior [-Waggressive-loop-optimizations]
  for(int i = 0; i < 404040; i++) tree[i] = -LINF;
                                          ^
koala.cpp:42:19: note: within this loop
  for(int i = 0; i < 404040; i++) tree[i] = -LINF;
                 ~~^~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...