Submission #53770

#TimeUsernameProblemLanguageResultExecution timeMemory
53770grumpy_gordonAbduction 2 (JOI17_abduction2)C++17
44 / 100
344 ms21240 KiB
/* .:*+=%@@@@@@=-. .:=@#@@@#@@#######%==*. .-=####@######%*-.....:%##%. .*@###########%+:--........-%@- .*@##############@+--.........-:%- .+##################@==%%%%=+*:----+. .-@####################%++%@@@@@=+**%@@* .%###################@%%@@@###@%+:--%@@%. -@###################@%%%%*::*%++:-----=@+. -#####################@%=++++++*:-------.-=: .+####################@%++*::-:::--::*:::***=: .@#####################%=++*::::-:::++*=##@@#@- ..#####################@%%=++**:::::**+%@#@%%##-.. .%####################@@%=+++*+****::*=@######@. .=######################@%%==+==++**+=@%@##@###+:... -#######################@@@%%%===++=@@@%=++===*::--... -########################@@@@@@@%==%%=++==@@:::::*:--. ..:#########################@@@@@@%%======++++::-..:-.--... %#############################@###@%%@@%==%=%*----.--.::---. #############################################*-:*:-:---*---- . #############################################*--*--:---*---:-. #############################################+--::--::-*::-::. ###########################################+:*-.---.---.:---*-.. ###########################################**:-----------------. ##########################################@::**:--::::::--:::::- ###########################################:--:*:::::::::**::*+* ###########################################=:::***::::::**:::*+* ############################@@@@@@#########@+****::::********+++ ############################@%%%%%@@@@@@@###%+***::::::::***+==+ ############################@%%%%%%%%%%%@####=+:::-::::-::*+=%%+ #############################@%%%%%%%%%%@#####=::--------:*=%@%+ %###########################@%%%%==%%%%%%@##@#=:------..-:+%@@%= ---------------------------------------------- -------------------------------------------- ---------------------------------------------- -------------------------------------------- ---------------------------------------------- o###########oo o##" ""##o o#" "## o#" "#o #" ## ## "## #" ## # ################### # # # # # # # # # # # # # #o # "#o ## "#o ## "#o o#" "#o ## "#o o#" "#ooo ooo#######oo ############### "######o o###"" "###o # ### o###o oooo ### oo####" o###**# #**# ############" ""##""""""""""########### # # oooooooo#"#** ## # # # # # ** ## # #o# #o# *****###ooo# ## ## o###o ## o##***## o########## #***#**##o o##" ""### #***##***# o#######o ### oo#### ##**####*# o##" ""#############"" ##****### ##" ## ##*##*### ## ### ##### ## ## ### # ## # ## ## # ## ## ## ### ## ###oo ### ""### ### ### */ #include <bits/stdc++.h> //#pragma GCC optimize("O3") //#pragma GCC optimize("Ofast,no-stack-protector") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx") //#pragma GCC target("avx,tune=native") //float __attribute__((aligned(32))) using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef unsigned int uint; ll sqr(ll x){ return x * x; } int mysqrt(ll x){ int l = 0, r = 1e9 + 1; while (r - l > 1){ int m = (l + r) / 2; if (m * (ll)m <= x) l = m; else r = m; } return l; } mt19937 rnd(1227); mt19937_64 rndll(12365); ll AR = 19, BR = 13, CR = 23, XR = 228, YR = 322, MODR = 1e9 + 993; ll myrand(){ ll ZR = (XR * AR + YR * BR + CR) % MODR; XR = YR; YR = ZR; return ZR; } const int Mod = 1e9 + 7; int bpow(int x, int y){ if (y == 0) return 1; if (y == 1) return x; int ret = bpow(x, y >> 1); ret = (ret * (ll)ret) % Mod; if (y & 1) ret = (ret * (ll)x) % Mod; return ret; } int bdiv(int x, int y){ return (x * (ll)bpow(y, Mod - 2)) % Mod; } void setmin(int &x, int y){ x = min(x, y); } void setmax(int &x, int y){ x = max(x, y); } void setmin(ll &x, ll y){ x = min(x, y); } void setmax(ll &x, ll y){ x = max(x, y); } int gcd(int a, int b){ return a ? gcd(b % a, a) : b; } const ll llinf = 2e18 + 100; const double eps = 1e-9; const int maxn = 5e4 + 10, maxw = 1e6 + 100, inf = 2e9 + 100, sq = 300, mod = 1e9 + 7, LG = 16; int sp[2][LG][maxn]; int a[2][maxn]; int n[2]; int leg[maxn]; int get(int t, int l, int r){ if (l > r) return -1; int lg = leg[r - l + 1]; return max(sp[t][lg][l], sp[t][lg][r - (1 << lg) + 1]); } map<ll, ll> ans; int Get(int x, int y, int t){ if (x < 0 || y < 0 || x >= n[0] || y >= n[1]) return -1; ll w = (x * (ll)maxn + y) * 2 + t; if (ans.find(w) == ans.end()){ int val = 0; int l, r; if (t == 0){ l = -1, r = x; while (r - l > 1){ int m = (l + r) / 2; if (get(0, m, x - 1) > a[1][y]) l = m; else r = m; } val = x - l + Get(l, y, 1); l = x, r = n[0]; while (r - l > 1){ int m = (l + r) / 2; if (get(0, x + 1, m) > a[1][y]) r = m; else l = m; } setmax(val, r - x + Get(r, y, 1)); }else{ l = -1, r = y; while (r - l > 1){ int m = (l + r) / 2; if (get(1, m, y - 1) > a[0][x]) l = m; else r = m; } val = y - l + Get(x, l, 0); l = y, r = n[1]; while (r - l > 1){ int m = (l + r) / 2; if (get(1, y + 1, m) > a[0][x]) r = m; else l = m; } setmax(val, r - y + Get(x, r, 0)); } ans[w] = val; } return ans[w]; } void prec(){ for (int i = 2; i < maxn; i++) leg[i] = leg[i >> 1] + 1; for (int t = 0; t < 2; t++) for (int j = 1; j < LG; j++) for (int i = 0; i + (1 << j) <= n[t]; i++) sp[t][j][i] = max(sp[t][j - 1][i], sp[t][j - 1][i + (1 << (j - 1))]); } int main() { #ifdef ONPC //ifstream cin("a.in"); //ofstream cout("a.out"); freopen("a.in", "r", stdin); freopen("a.out", "w", stdout); #else //ifstream cin("gymnasts.in"); //ofstream cout("gymnasts.out"); //freopen("sort.in", "r", stdin); //freopen("sort.out", "w", stdout); #endif // ONPC ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n[0] >> n[1]; int zap; cin >> zap; for (int t = 0; t < 2; t++){ for (int i = 0; i < n[t]; i++) cin >> a[t][i], sp[t][0][i] = a[t][i]; } prec(); while (zap--){ int x, y; cin >> x >> y; cout << max(Get(x - 1, y - 1, 0), Get(x - 1, y - 1, 1)) << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...