Submission #1040397

#TimeUsernameProblemLanguageResultExecution timeMemory
1040397Yang8onDivide and conquer (IZhO14_divide)C++14
100 / 100
33 ms9684 KiB
#include <bits/stdc++.h> #define Y8o "Divide and conquer" #define maxn (int) 1e5 + 5 #define ll long long #define pii pair<ll, ll> #define gb(i, j) ((i >> j) & 1) #define all(x) x.begin(), x.end() #define _left id * 2, l, mid #define _right id * 2 + 1, mid + 1, r //#define f first //#define s second using namespace std; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); ll GetRandom(ll l, ll r) { return uniform_int_distribution<ll> (l, r) (rng); } void iof() { if(fopen(Y8o".in", "r")) { freopen(Y8o".in", "r", stdin); freopen(Y8o".out", "w", stdout); } ios_base::sync_with_stdio(0); cin.tie(NULL), cout.tie(NULL); } void ctime() { cerr << "\n" << "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n"; } int n; struct dl { int td, g, e; } a[maxn]; ll se[maxn], sg[maxn], dp[maxn]; vector<ll> cur; int rz(ll x) { return lower_bound( all(cur), x ) - cur.begin() + 1; } ll bit[2 * maxn]; void update(int x, ll val) { while(x) bit[x] = min(bit[x], val), x -= (x & -x); } ll get(int x, ll best = 1e18) { while(x < 2 * maxn) best = min(best, bit[x]), x += (x & -x); return best; } void solve() { cin >> n; for(int i = 1; i <= n; i ++) { cin >> a[i].td >> a[i].g >> a[i].e; se[i] = se[i - 1] + a[i].e, sg[i] = sg[i - 1] + a[i].g; } // ll ans = 0; // for(int i = 1; i <= n; i ++) { // for(int j = i; j <= n; j ++) { // if(a[j].td - a[i].td <= se[j] - se[i - 1]) { // ans = max(ans, sg[j] - sg[i - 1]); // } // } // } for(int i = 1; i <= n; i ++) { cur.push_back(a[i].td - se[i]); cur.push_back(a[i].td - se[i - 1]); } sort( all(cur) ); cur.resize( unique( all(cur) ) - cur.begin() ); for(int i = 1; i < 2 * maxn; i ++) bit[i] = 1e18; for(int i = 1; i <= n; i ++) { update( rz(a[i].td - se[i - 1]), sg[i - 1] ); dp[i] = sg[i] - get( rz(a[i].td - se[i]) ); } cout << *max_element(dp + 1, dp + n + 1); } int main() { iof(); int nTest = 1; // cin >> nTest; while(nTest --) { solve(); } ctime(); return 0; }

Compilation message (stderr)

divide.cpp: In function 'void iof()':
divide.cpp:23:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   23 |         freopen(Y8o".in", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
divide.cpp:24:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   24 |         freopen(Y8o".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...