Submission #42934

#TimeUsernameProblemLanguageResultExecution timeMemory
42934funcsrDivide and conquer (IZhO14_divide)C++14
100 / 100
81 ms23820 KiB
#include <cstdio> #include <iostream> #include <algorithm> #include <string> #include <cstring> #include <vector> #include <queue> #include <set> #include <map> #include <cmath> #include <iomanip> #include <cassert> #include <bitset> using namespace std; typedef pair<long long, long long> P; #define rep(i, n) for (int i=0; i<(n); i++) #define all(c) (c).begin(), (c).end() #define uniq(c) c.erase(unique(all(c)), (c).end()) #define index(xs, x) (int)(lower_bound(all(xs), x) - xs.begin()) #define _1 first #define _2 second #define pb push_back #define INF 1145141919 #define MOD 1000000007 #define MAX_N (1<<17) long long seg[MAX_N*2-1]; void update(int k, long long v) { k += MAX_N-1; seg[k] = max(seg[k], v); while (k > 0) { k = (k-1)/2; seg[k] = max(seg[k*2+1], seg[k*2+2]); } } long long query(int a, int b, int k=0, int l=0, int r=MAX_N) { if (b <= l || r <= a) return 0; if (a <= l && r <= b) return seg[k]; return max(query(a, b, k*2+1, l, (l+r)/2), query(a, b, k*2+2, (l+r)/2, r)); } int N; long long X[100000], A[100000], B[100000]; signed main() { ios::sync_with_stdio(false); cin.tie(0); cin >> N; rep(i, N) cin >> X[i] >> A[i] >> B[i]; rep(i, N-1) A[i+1] += A[i]; rep(i, N-1) B[i+1] += B[i]; vector<long long> xs; rep(i, N) xs.pb(B[i]-X[i]); sort(all(xs)); uniq(xs); long long m = 0; for (int l=N-1; l>=0; l--) { update(index(xs, B[l]-X[l]), A[l]); long long border = (l>0?B[l-1]:0)-X[l]; long long v = query(index(xs, border), MAX_N); if (v != 0) m = max(m, v - (l>0?A[l-1]:0)); } cout << m << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...