제출 #585048

#제출 시각아이디문제언어결과실행 시간메모리
585048GioChkhaidzeProgression (NOI20_progression)C++14
35 / 100
350 ms45448 KiB
// Source: https://usaco.guide/general/io #include <bits/stdc++.h> #define lf (h << 1) #define mf ((l + r) >> 1) #define rf ((h << 1) | 1) #define tree int h, int l, int r #define left lf, l, mf #define right rf, mf + 1, r #define ll long long #define f first #define s second using namespace std; const int N = 3e5 + 5; int n, m, q, L, R, S, C, a[N], b[N]; struct node { int ans; int len; int fr; int ls; int pr; int sf; int add; node () { ans = 0; len = 0; add = 0; fr = 0; ls = 0; pr = 0; sf = 0; } }; node v[4 * N], bs; node mrg(node a, node b) { node c; c.len = a.len + b.len; c.fr = a.fr, c.ls = b.ls; c.pr = a.pr, c.sf = b.sf; c.ans = max(a.ans, b.ans); if (a.ls == b.fr) { if (a.len == c.pr) c.pr += b.pr; if (b.len == c.sf) c.sf += a.sf; c.ans = max(c.ans, a.sf + b.pr); } return c; } void shift(tree) { } void build(tree) { if (l == r) { v[h].pr = v[h].sf = v[h].len = v[h].ans = 1; v[h].fr = v[h].ls = b[l]; return ; } build(left), build(right); v[h] = mrg(v[lf], v[rf]); } void up_dot(tree) { if (l == r) { return; } shift(h, l, r); if (L <= mf) { up_dot(left); } else { up_dot(right); } v[h] = mrg(v[lf], v[rf]); } node get(tree) { if (r < L || R < l) return bs; if (L <= l && r <= R) return v[h]; shift(h, l, r); return mrg(get(left), get(right)); } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cin >> n >> q; for (int i = 1; i <= n; ++i) { cin >> a[i]; if (1 < i) { b[i - 1] = a[i] - a[i - 1]; } } m = n + 1; build(1, 1, m); for (int i = 1; i <= q; ++i) { int tp; cin >> tp >> L >> R; if (tp == 1) { cin >> S >> C; /*if (L == R) { upd_dot(1, 1, n); }*/ } else if (tp == 2) { cin >> S >> C; /*if (L == R) { }*/ } else if (tp == 3) { --R; cout << get(1 , 1, m).ans + 1 << "\n"; } } } /* S + (i − L) × C. S + i * C - L * C (S - L * C) + i * C b[i] = a[i + 1] - a[i] QUERY ADD QUERY PUT QUERY */
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...