제출 #145310

#제출 시각아이디문제언어결과실행 시간메모리
145310gs18103코알라 (JOI13_koala)C++14
0 / 100
116 ms7956 KiB
#include <bits/stdc++.h> #define LINF 1000000000000000000LL using namespace std; typedef long long ll; int t[101010]; ll tree[404040], b[101010], dp[101010]; vector <int> 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); int K, M, D, A, n; 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); 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 'll update(int, int, int, int, ll)':
koala.cpp:13:11: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  int m = s+e>>1;
          ~^~
koala.cpp: In function 'll cal(int, int, int, int, int)':
koala.cpp:22:11: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  int m = s+e>>1;
          ~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...