Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <map>
- #include <set>
- #include <queue>
- #include <algorithm>
- #include <string>
- #include <cmath>
- #include <cstdio>
- #include <iomanip>
- #include <fstream>
- #include <cassert>
- #include <cstring>
- #include <unordered_set>
- #include <unordered_map>
- #include <numeric>
- #include <ctime>
- #include <bitset>
- #include <complex>
- #include <random>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- #ifdef DEBUG
- const int MAXN = 10;
- const int MAXLOG = 4;
- const int MAXSQRT = 4;
- #else
- const int MAXN = 3e5;
- const int MAXLOG = 20;
- const int MAXSQRT = 400;
- #define cerr if (false) cerr
- #endif
- mt19937 rng(time(0));
- const int INF = 1e9;
- const int MOD = 1e9 + 7;
- int n;
- int ans = 0;
- int val[MAXN];
- int sparse[MAXN][MAXLOG];
- int precalc[MAXN];
- int border[MAXN][MAXLOG];
- int color[MAXN][MAXLOG];
- void build() {
- for (int i = 0; i < n; i++) {
- sparse[i][0] = val[i];
- }
- for (int i = 1; i < MAXLOG; i++) {
- for (int j = 0; (j + (1 << i)) <= MAXLOG; j++) {
- sparse[j][i] = min(sparse[j][i - 1], sparse[j + (1 << (i - 1))][i - 1]);
- }
- }
- }
- int get(int l, int r) {
- int lg = precalc[r - l + 1];
- return min(sparse[l][lg], sparse[r - (1 << lg) + 1][lg]);
- }
- int nxt(int x, int pos) {
- int l = pos + 1;
- int r = n;
- while (l + 1 < r) {
- int mid = (l + r) >> 1;
- if (get(pos + 1, mid) <= x) {
- r = mid;
- }
- else {
- l = mid;
- }
- }
- return r;
- }
- inline void init() {
- precalc[1] = 0;
- for (int i = 2; i < MAXN; i++) {
- precalc[i] = precalc[i >> 1] + 1;
- }
- ans = 0;
- }
- inline void solve() {
- init();
- for (int i = 0; i < n; i++) {
- cin >> a[i];
- }
- build();
- for (int i = 0; i < n; i++) {
- int pnt = 1;
- int cur = val[i];
- int pos = i;
- while (pos < n) {
- pos = nxt(cur, pos);
- color[i][pnt] = cur;
- border[i][pnt++] = pos - 1;
- if (pos != n) {
- cur = cur % val[pos];
- }
- }
- }
- }
- signed main() {
- #ifdef DEBUG
- freopen("I.in", "r", stdin);
- freopen("I.out", "w", stdout);
- #else
- #endif
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- while (cin >> n)
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment