Submission #31761

#TimeUsernameProblemLanguageResultExecution timeMemory
31761ruhanhabib39Divide and conquer (IZhO14_divide)C++14
100 / 100
73 ms7876 KiB
#include <bits/stdc++.h> using namespace std; const int INF = 1e9; const int MAXN = 1e5; int N; int X[MAXN + 10], G[MAXN + 10], D[MAXN + 10]; long long gs[MAXN + 10], ds[MAXN + 10]; long long mxt[4 * MAXN + 10]; void init(int cn, int b, int e) { if(b == e) { mxt[cn] = X[b] - ds[b-1]; // cerr << "mxt[" << b << "] = " << mxt[cn] << "\n"; return; } int m = (b + e) / 2; init(2*cn, b, m); init(2*cn+1, m+1, e); mxt[cn] = max(mxt[2*cn], mxt[2*cn+1]); } int get(int cn, int b, int e, int l, int r, long long mv) { if(r < b || l > e) return INF; if(mxt[cn] < mv) return INF; if(b == e) return b; int m = (b + e) / 2; int L = get(2*cn, b, m, l, r, mv); if(L < INF) return L; return get(2*cn+1, m+1, e, l, r, mv); } int main() { scanf("%d", &N); for(int i = 1; i <= N; i++) { scanf("%d%d%d", &X[i], &G[i], &D[i]); } for(int i = 1; i <= N; i++) { gs[i] = G[i] + gs[i-1]; ds[i] = D[i] + ds[i-1]; } init(1, 1, N); long long res = 0; for(int r = 1; r <= N; r++) { int l = get(1, 1, N, 1, r, X[r] - ds[r]); // cerr << "l = " << l << "\n"; // cerr << "my[" << r << "] = " << X[r] << " " << ds[r] << "\n"; long long gold = gs[r] - gs[l-1]; res = max(res, gold); } printf("%lld\n", res); }

Compilation message (stderr)

divide.cpp: In function 'int main()':
divide.cpp:36:19: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d", &N);
                   ^
divide.cpp:38:43: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
       scanf("%d%d%d", &X[i], &G[i], &D[i]);
                                           ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...