Submission #1158429

#TimeUsernameProblemLanguageResultExecution timeMemory
1158429Wendidiaskpopa (BOI18_popa)C++20
100 / 100
25 ms464 KiB
/* :---:--:--::::::--:-:----: ::-:::. ::-::: .* -===.. :--- .-+*##=-------====-: :--: :+##=.* -= :=+- .-=: .+++-. :- -=. .=+- .--. .++=- + -= :*- :-. +*+- :- -=. -*: :=: #*: * -=. +- .= =:%+ -: -=. +- -- -%: * -=. *: +. :%-.. =. -=. # -: :=# .. + -=. == -= ---+ . = -=. .# .+ -: == . = :------::------:.-=. % .= :- == .=. ---:. :--#+. .% :- = .* .+.. :=- :++ -+ =: + #. + -=: :*%-*: * := :# :=:= . :-----: =+-+ .+ * -* *=- . .- :::::::. :* .#+. + :- -+ :#. --::-----: :* ++= .- + :*. *. .:::::*%: ++ +.-=. + + -#**----: .= -*. + -= = * +.#=+: + . .=+: =. -=. = = -+ :++: + .. .=+= .= -=. - = %- :====-:. =. .:--===- * -=. - + +-- .:--==#==-:.= + -=. = * + * =. : .= -=. = + = * + = -=. + :- = .= =: = -=. .- * + =: * * -=. + :- .+ =- :- .+ -=. .+ * * := * := -= * = :- =: .- .=: -=. =: -: * .=- + .=- -= :- =: -: --: :- :--: -=. .= =:+ ----. * :---. -= .+ --=*----------------------=*+=--=+--=+*+------------------------------------------------%+:. :: := +:- -- :. .=. =. -= -= .=: .=. .=: .+: :-- :-: -- -=. :--. --: :--: .--: .-:-: ::--. :----. .:---- .:::::::::-::::::--::::::::. */ // Hello this is Tyx2019's clone #include "popa.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define debug(x) cerr << #x << " is " << x << "\n" #define hehe ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define rep(i, a, b) for (int i = a; i <= b; i++) #define repb(i, a, b) for (int i = b; i >= a; i--) #define pii pair<int, int> #define linebreak cout << "---------------------------------------------------------\n" #define f first #define s second #define pb push_back #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") // good luck const ll MS = 1005, mod = 1e9+9, INF = 3e18, blk = 400; int nextt[MS], L[MS], R[MS]; int build(int l, int r) { if (l > r) return -1; int m = l; while (nextt[m] <= r) m = nextt[m]; L[m] = build(l, m-1); R[m] = build(m+1, r); return m; } int solve(int n, int *left, int *right) { stack<int> st; // next[i] = first index j such that a[j] divides a[i], ..., a[j]. // i.e. first index j such that gcd(a[i, ... ,j]) = a[j] for (int i = 0; i < n; i++) { if (st.empty()) { st.push(i); continue; } while (!st.empty() and query(st.top(), i, i, i)) { nextt[st.top()] = i; st.pop(); } st.push(i); } while (!st.empty()){ nextt[st.top()] = MS-1; st.pop(); } int root = build(0, n-1); for (int i = 0; i < n; i++) left[i] = L[i], right[i] = R[i]; return root; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...