Submission #916122

# Submission time Handle Problem Language Result Execution time Memory
916122 2024-01-25T10:44:44 Z GrindMachine Gap (APIO16_gap) C++17
0.269521 / 100
107 ms 16784 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

template<typename T> using Tree = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
typedef long long int ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL)
#define pb push_back
#define endl '\n'
#define sz(a) (int)a.size()
#define setbits(x) __builtin_popcountll(x)
#define ff first
#define ss second
#define conts continue
#define ceil2(x,y) ((x+y-1)/(y))
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define yes cout << "Yes" << endl
#define no cout << "No" << endl

#define rep(i,n) for(int i = 0; i < n; ++i)
#define rep1(i,n) for(int i = 1; i <= n; ++i)
#define rev(i,s,e) for(int i = s; i >= e; --i)
#define trav(i,a) for(auto &i : a)

template<typename T>
void amin(T &a, T b) {
    a = min(a,b);
}

template<typename T>
void amax(T &a, T b) {
    a = max(a,b);
}

#ifdef LOCAL
#include "debug.h"
#else
#define debug(x) 42
#endif

/*

read some solutions a long time ago, slightly remember some ideas
may have still solved it if not for those ideas

*/

const int MOD = 1e9 + 7;
const int N = 1e5 + 5;
const int inf1 = int(1e9) + 5;
const ll inf2 = ll(1e18) + 5;
const int B = 1e5 + 5;

#include "gap.h"

ll go(ll l, ll r){
	if(l >= r) return 0;

	// split into B segs
	ll len = r-l+1;
	ll cnt1 = B;
	ll cnt2 = len%B;
	cnt1 -= cnt2;

	vector<pll> segs;
	ll ptr = l;

	rep1(i,cnt1){
		if(len >= B){
			segs.pb({ptr,ptr+len/B-1});
		}
		ptr += len/B;
	}

	rep1(i,cnt2){
		segs.pb({ptr,ptr+ceil2(len,B)-1});
		ptr += ceil2(len,B);
	}

	// cout << "l = " << l << endl;
	// cout << "r = " << r << endl;
	// for(auto [lx,rx] : segs){
	// 	cout << lx << " " << rx << endl;
	// }

	assert(ptr == r+1);

	vector<pll> seg_vals;
	ll ans = 0;

	rep(i,sz(segs)){
		ll mn,mx;
		auto [lx,rx] = segs[i];
		MinMax(lx,rx,&mn,&mx);
		seg_vals.pb({mn,mx});
	}

	while(!segs.empty() and seg_vals.back().ff == -1){
		segs.pop_back();
		seg_vals.pop_back();
	}

	reverse(all(segs));
	reverse(all(seg_vals));

	while(!segs.empty() and seg_vals.back().ff == -1){
		segs.pop_back();
		seg_vals.pop_back();
	}

	reverse(all(segs));
	reverse(all(seg_vals));

	ll last_active = -1;

	for(auto [mn,mx] : seg_vals){
		if(mn != -1){
			if(last_active != -1){
				amax(ans,mn-last_active);
			}
			last_active = mx;
		}
	}

	if(count(all(seg_vals),make_pair<ll>(-1ll,-1ll)) == 0){
		ll lx = segs[0].ff;
		ll rx = segs.back().ss;
		amax(ans,go(lx,rx));
	}

	return ans;
}

long long findGap(int T, int n)
{
	return go(0,1e18);
}
# Verdict Execution time Memory Grader output
1 Incorrect 5 ms 5064 KB Output isn't correct
2 Incorrect 7 ms 7112 KB Output isn't correct
3 Incorrect 7 ms 7112 KB Output isn't correct
4 Incorrect 8 ms 7112 KB Output isn't correct
5 Incorrect 20 ms 13272 KB Output isn't correct
6 Incorrect 10 ms 7112 KB Output isn't correct
7 Incorrect 11 ms 7112 KB Output isn't correct
8 Incorrect 9 ms 7112 KB Output isn't correct
9 Incorrect 9 ms 7112 KB Output isn't correct
10 Incorrect 25 ms 13260 KB Output isn't correct
11 Incorrect 13 ms 7112 KB Output isn't correct
12 Incorrect 13 ms 7056 KB Output isn't correct
13 Incorrect 15 ms 7112 KB Output isn't correct
14 Incorrect 12 ms 7112 KB Output isn't correct
15 Incorrect 32 ms 13260 KB Output isn't correct
16 Incorrect 23 ms 7044 KB Output isn't correct
17 Incorrect 22 ms 7052 KB Output isn't correct
18 Incorrect 22 ms 7056 KB Output isn't correct
19 Incorrect 23 ms 7044 KB Output isn't correct
20 Incorrect 45 ms 13436 KB Output isn't correct
21 Incorrect 43 ms 7320 KB Output isn't correct
22 Incorrect 43 ms 7376 KB Output isn't correct
23 Incorrect 43 ms 7316 KB Output isn't correct
24 Incorrect 43 ms 7312 KB Output isn't correct
25 Incorrect 107 ms 16784 KB Output isn't correct
26 Incorrect 43 ms 7312 KB Output isn't correct
27 Incorrect 43 ms 7308 KB Output isn't correct
28 Incorrect 43 ms 7324 KB Output isn't correct
29 Incorrect 45 ms 7316 KB Output isn't correct
30 Incorrect 55 ms 13712 KB Output isn't correct
31 Incorrect 9 ms 7112 KB Output isn't correct
32 Incorrect 8 ms 7112 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Partially correct 6 ms 7112 KB Partially correct
2 Partially correct 8 ms 7112 KB Partially correct
3 Partially correct 8 ms 7112 KB Partially correct
4 Partially correct 8 ms 7112 KB Partially correct
5 Partially correct 20 ms 13272 KB Partially correct
6 Partially correct 9 ms 7112 KB Partially correct
7 Partially correct 9 ms 7112 KB Partially correct
8 Partially correct 9 ms 6920 KB Partially correct
9 Partially correct 10 ms 7112 KB Partially correct
10 Partially correct 25 ms 13272 KB Partially correct
11 Partially correct 13 ms 7112 KB Partially correct
12 Partially correct 12 ms 7084 KB Partially correct
13 Partially correct 13 ms 7072 KB Partially correct
14 Partially correct 12 ms 7112 KB Partially correct
15 Partially correct 33 ms 13344 KB Partially correct
16 Partially correct 23 ms 7048 KB Partially correct
17 Partially correct 24 ms 7048 KB Partially correct
18 Partially correct 22 ms 7052 KB Partially correct
19 Partially correct 23 ms 7036 KB Partially correct
20 Partially correct 45 ms 13408 KB Partially correct
21 Correct 45 ms 7312 KB Output is correct
22 Correct 43 ms 7456 KB Output is correct
23 Correct 43 ms 7316 KB Output is correct
24 Correct 42 ms 7312 KB Output is correct
25 Partially correct 104 ms 16680 KB Partially correct
26 Correct 43 ms 7308 KB Output is correct
27 Correct 43 ms 7524 KB Output is correct
28 Correct 43 ms 7272 KB Output is correct
29 Correct 43 ms 7312 KB Output is correct
30 Partially correct 55 ms 13560 KB Partially correct
31 Partially correct 9 ms 7112 KB Partially correct
32 Partially correct 9 ms 7112 KB Partially correct