제출 #33591

#제출 시각아이디문제언어결과실행 시간메모리
33591RockyB금 캐기 (IZhO14_divide)C++14
100 / 100
86 ms23296 KiB
/// In The Name Of God #pragma GCC optimize("Ofast") #pragma GCC target("sse,sse2,sse3,sse3,sse4,popcnt,abm,mmx") #include <bits/stdc++.h> #define f first #define s second #define pb push_back #define pp pop_back #define mp make_pair #define sz(x) (int)x.size() #define sqr(x) ((x) * 1ll * (x)) #define all(x) x.begin(), x.end() #define Kazakhstan ios_base :: sync_with_stdio(0), cin.tie(0), cout.tie(0); #define nl '\n' #define ioi exit(0); typedef long long ll; typedef long double ld; typedef unsigned long long ull; const int N = (int)5e5 + 7, inf = (int)1e9 + 7, mod = (int)1e9 + 7; const ll linf = (ll)1e18 + 7; const int dx[] = {-1, 0, 1, 0, 1, -1, -1, 1}, dy[] = {0, 1, 0, -1, 1, -1, 1, -1}; using namespace std; int n; ll ans; int x[N], g[N]; ll d[N], s[N]; vector <ll> cmp; int t[N << 2]; void upd(int p, int x, int v = 1, int tl = 0, int tr = n) { if (tl == tr) { t[v] = min(t[v], x); return; } int tm = tl + tr >> 1; if (p <= tm) upd(p, x, v << 1, tl, tm); else upd(p, x, v << 1 | 1, tm + 1, tr); t[v] = min(t[v << 1], t[v << 1 | 1]); } int get(int l, int r, int v = 1, int tl = 0, int tr = n) { if (l <= tl && tr <= r) return t[v]; if (tl > r || tr < l) return inf; int tm = tl + tr >> 1; return min(get(l, r, v << 1, tl, tm), get(l, r, v << 1 | 1, tm + 1, tr)); } int main() { #ifdef IOI2018 freopen ("in.txt", "r", stdin); #endif Kazakhstan cin >> n; for (int i = 1; i <= n; i++) { cin >> x[i] >> s[i] >> d[i]; d[i] += d[i - 1]; s[i] += s[i - 1]; cmp.pb(x[i] - d[i - 1]); } sort(all(cmp)); cmp.erase(unique(all(cmp)), cmp.end()); memset(t, 0x3f, sizeof(t)); for (int i = 1; i <= n; i++) { ll now = x[i] - d[i - 1]; upd(lower_bound(all(cmp), now) - cmp.begin(), i); } ll ans = 0; for (int i = 1; i <= n; i++) { int p = get(lower_bound(all(cmp), x[i] - d[i]) - cmp.begin(), n); if (p <= n) ans = max(ans, s[i] - s[p - 1]); } cout << ans; ioi }

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

divide.cpp: In function 'void upd(int, int, int, int, int)':
divide.cpp:47:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  int tm = tl + tr >> 1;
              ^
divide.cpp: In function 'int get(int, int, int, int, int)':
divide.cpp:55:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  int tm = tl + tr >> 1;
              ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...