Submission #775545

#TimeUsernameProblemLanguageResultExecution timeMemory
775545OrazBGap (APIO16_gap)C++14
30 / 100
41 ms2104 KiB
#include <bits/stdc++.h> #include "gap.h" #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <functional> using namespace __gnu_pbds; using namespace std; typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; //Dijkstra->set //set.find_by_order(x) x-position value //set.order_of_key(x) number of strictly less elements don't need *set.?? #define N 100005 #define wr cout << "Continue debugging\n"; #define all(x) (x).begin(), (x).end() #define ll long long int #define pii pair <int, int> #define pb push_back #define ff first #define ss second const ll inf = 1e18; ll a[N]; vector<ll> vec; // void rec(ll l, ll r){ // if (l > r) return; // ll mn, mx; // MinMax(l, r, &mn, &mx); // if (mn == -1) return; // vec.pb(mn); // if (mn != mx) // vec.pb(mx); // ll md = (mx+mn)/2; // rec(mn+1, md); // rec(md+1, mx-1); // } ll findGap(int t, int n) { if (t == 1){ int l = 1, r = n; ll mn = 0, mx = 1e18, ans = 0; while(l <= r){ ll s = mn, t = mx; MinMax(s, t, &mn, &mx); a[l] = mn; a[r] = mx; if (l > 1) ans = max(ans, a[l]-a[l-1]); if (r < n) ans = max(ans, a[r+1]-a[r]); l++; r--; mn++; mx--; } if (n == 2) return a[2]-a[1]; return ans; } ll ans = 0; ll mn, mx; MinMax(0, inf, &mn, &mx); ll l = mn, r = mx; while (l < r){ ll md = (l+r)/2; ll mn, mx, mn1, mx1, x = -inf, y = -inf; assert(l > md); MinMax(l, md, &mn, &mx); mn1 = mn; mx1 = mx; if (mn1 != -1) x = mx1-mn1+1; assert(md+1 > r); MinMax(md+1, r, &mn, &mx); if (mn != -1) y = mx-mn+1; if (mx1 != -1 and mn != -1) ans = max(ans, mn-mx1); if (x > y) r = md; else l = md + 1; } // rec(0, inf); // sort(all(vec)); // for (int i = 1; i < (int)vec.size(); i++) ans = max(ans, vec[i]-vec[i-1]); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...