#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define f first
#define s second
#define endl "\n"
const int N = 3e5 + 5, mod = 1e9 + 7, inf = 4e18; //!
int t, d[N], a[N];
struct node {
int L, R, len;
pii suf, pref;
int ans;
} tree[4 * N];
struct z {
int k, b, t;
} lazy[N];
bool eq(int a, int b) {
return (a == -inf || b == -inf ? 1 : a == b);
}
node merge(node a, node b) {
node c;
c.len = a.len + b.len;
c.L = a.L; c.R = b.R;
c.ans = max(a.ans, b.ans);
// cout << eq(a.suf.f, b.suf.f) << endl;
if(eq(a.suf.f, b.pref.f) && eq(a.suf.f, b.L - a.R) && eq(b.pref.f, b.L - a.R)) {
c.ans = max(c.ans, a.suf.s + b.pref.s);
}
if(eq(a.suf.f, b.L - a.R)) {
c.ans = max(c.ans, a.suf.s + 1);
}
if(eq(b.pref.f, b.L - a.R)) {
c.ans = max(c.ans, b.pref.s + 1);
}
c.suf = b.suf;
if(b.suf.s == b.len && eq(a.suf.f, b.pref.f) && eq(a.suf.f, b.L - a.R) && eq(b.suf.f, b.L - a.R)) {
c.suf.s += a.suf.s;
} else if(b.suf.s == b.len && eq(b.suf.f, b.L - a.R)) {
c.suf.s++;
}
c.pref = a.pref;
if(a.pref.s == a.len && eq(a.pref.f, b.pref.f)&& eq(a.pref.f, b.L - a.R) && eq(b.pref.f, b.L - a.R)) {
c.pref.s += b.pref.s;
} else if(a.pref.s == a.len && eq(a.pref.f, b.L - a.R)) c.pref.s++;
if(b.len == 1) {
c.suf.f = b.L - a.R;
}
if(a.len == 1) {
c.pref.f = b.L - a.R;
}
return c;
}
void build(int u,int l,int r) {
if(l == r) {
tree[u].L = tree[u].R = a[l];
tree[u].ans = 1;
tree[u].pref = {-inf, 1};
tree[u].suf = {-inf, 1};
tree[u].len = 1;
return;
}
int mid = (l + r) / 2;
build(2 * u, l, mid); build(2 * u + 1, mid + 1, r);
tree[u] = merge(tree[2 * u], tree[2 * u + 1]);
// cout << l << " " << r << " " << tree[u].ans << " " << tree[u].R << " " << tree[u].suf.f << " " << tree[u].suf.s <<endl;
}
void push(int u,int l,int r) {
if(lazy[u].t) {
tree[u].ans = r - l + 1;
tree[u].L = lazy[u].k * l + lazy[u].b;
tree[u].R = lazy[u].k * r + lazy[u].b;
tree[u].pref.s = tree[u].suf.s = r - l + 1;
tree[u].pref.f = tree[u].suf.f = (r == l ? -inf : lazy[u].k);
tree[u].ans = r - l + 1;
if(l != r) {
lazy[2 * u].t = lazy[2 * u + 1].t = 1;
lazy[2 * u].k = lazy[2 * u + 1].k = lazy[u].k;
lazy[2 * u].b = lazy[2 * u + 1].b = lazy[u].b;
}
} else {
tree[u].L += lazy[u].k * l + lazy[u].b;
tree[u].R += lazy[u].k * r + lazy[u].b;
if(tree[u].len > 1) {
tree[u].pref.f += lazy[u].k;
tree[u].suf.f += lazy[u].k;
}
if(l != r) {
lazy[2 * u].k += lazy[u].k;
lazy[2 * u + 1].k += lazy[u].k;
lazy[2 * u].b += lazy[u].b;
lazy[2 * u + 1].b += lazy[u].b;
}
}
lazy[u].k = lazy[u].b = lazy[u].t = 0;
}
void upd(int u,int st,int en,int l,int r,int k,int b,int t) {
push(u, l, r);
if(l > en || r < st) return;
if(st <= l && r <= en) {
lazy[u].k = k;
lazy[u].b = b;
lazy[u].t = (t == 2);
push(u, l, r);
return;
}
int mid = (l + r) / 2;
upd(2 * u, st, en, l, mid, k, b, t);
upd(2 * u + 1, st, en, mid + 1, r, k, b, t);
tree[u] = merge(tree[2 * u], tree[2 * u + 1]);
}
node get(int u,int st,int en, int l,int r) {
push(u, l, r);
if(st <= l && r <= en) return tree[u];
int mid = (l + r) / 2;
if(mid + 1 > en) return get(2 * u, st, en, l, mid);
if(mid < st) return get(2 * u + 1, st, en, mid + 1, r);
return merge(get(2 * u, st, en, l, mid), get(2 * u + 1, st, en, mid + 1, r));
}
main() {
ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int n, q;
cin >> n >> q;
for(int i = 1; i <= n; i++) {
cin >> a[i];
}
build(1, 1, n);
for(int i = 1; i <= q; i++) {
int t;
cin >> t;
if(t < 3) {
int l, r, s, c;
cin >> l >> r >> s >> c;
upd(1, l, r, 1, n, c, s - l * c, t);
continue;
}
int l, r;
cin >> l >> r;
// for(int j = 1; j <= n; j++) a[j] = get(1, j, 1, n);
cout << get(1, l, r, 1, n).ans << endl;
}
}
Compilation message
Progression.cpp:125:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
125 | main() {
| ^~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
147 ms |
78412 KB |
Output is correct |
2 |
Correct |
99 ms |
75660 KB |
Output is correct |
3 |
Correct |
101 ms |
75724 KB |
Output is correct |
4 |
Correct |
103 ms |
75664 KB |
Output is correct |
5 |
Correct |
99 ms |
75768 KB |
Output is correct |
6 |
Correct |
100 ms |
75812 KB |
Output is correct |
7 |
Correct |
100 ms |
75748 KB |
Output is correct |
8 |
Correct |
29 ms |
75476 KB |
Output is correct |
9 |
Correct |
29 ms |
75436 KB |
Output is correct |
10 |
Correct |
28 ms |
75372 KB |
Output is correct |
11 |
Correct |
147 ms |
78428 KB |
Output is correct |
12 |
Correct |
152 ms |
78308 KB |
Output is correct |
13 |
Correct |
156 ms |
78608 KB |
Output is correct |
14 |
Correct |
187 ms |
78716 KB |
Output is correct |
15 |
Correct |
148 ms |
78668 KB |
Output is correct |
16 |
Correct |
158 ms |
78412 KB |
Output is correct |
17 |
Correct |
160 ms |
78376 KB |
Output is correct |
18 |
Correct |
155 ms |
78284 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
30 ms |
75476 KB |
Output is correct |
2 |
Correct |
29 ms |
75476 KB |
Output is correct |
3 |
Correct |
28 ms |
75400 KB |
Output is correct |
4 |
Correct |
29 ms |
75440 KB |
Output is correct |
5 |
Correct |
30 ms |
75416 KB |
Output is correct |
6 |
Correct |
28 ms |
75476 KB |
Output is correct |
7 |
Correct |
29 ms |
75384 KB |
Output is correct |
8 |
Correct |
31 ms |
75496 KB |
Output is correct |
9 |
Correct |
29 ms |
75476 KB |
Output is correct |
10 |
Correct |
33 ms |
75408 KB |
Output is correct |
11 |
Correct |
29 ms |
75468 KB |
Output is correct |
12 |
Correct |
30 ms |
75476 KB |
Output is correct |
13 |
Correct |
30 ms |
75468 KB |
Output is correct |
14 |
Correct |
29 ms |
75512 KB |
Output is correct |
15 |
Correct |
29 ms |
75412 KB |
Output is correct |
16 |
Correct |
31 ms |
75512 KB |
Output is correct |
17 |
Correct |
29 ms |
75468 KB |
Output is correct |
18 |
Correct |
32 ms |
75476 KB |
Output is correct |
19 |
Correct |
32 ms |
75440 KB |
Output is correct |
20 |
Correct |
32 ms |
75384 KB |
Output is correct |
21 |
Correct |
30 ms |
75396 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
321 ms |
85868 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
603 ms |
85196 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
321 ms |
85868 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
147 ms |
78412 KB |
Output is correct |
2 |
Correct |
99 ms |
75660 KB |
Output is correct |
3 |
Correct |
101 ms |
75724 KB |
Output is correct |
4 |
Correct |
103 ms |
75664 KB |
Output is correct |
5 |
Correct |
99 ms |
75768 KB |
Output is correct |
6 |
Correct |
100 ms |
75812 KB |
Output is correct |
7 |
Correct |
100 ms |
75748 KB |
Output is correct |
8 |
Correct |
29 ms |
75476 KB |
Output is correct |
9 |
Correct |
29 ms |
75436 KB |
Output is correct |
10 |
Correct |
28 ms |
75372 KB |
Output is correct |
11 |
Correct |
147 ms |
78428 KB |
Output is correct |
12 |
Correct |
152 ms |
78308 KB |
Output is correct |
13 |
Correct |
156 ms |
78608 KB |
Output is correct |
14 |
Correct |
187 ms |
78716 KB |
Output is correct |
15 |
Correct |
148 ms |
78668 KB |
Output is correct |
16 |
Correct |
158 ms |
78412 KB |
Output is correct |
17 |
Correct |
160 ms |
78376 KB |
Output is correct |
18 |
Correct |
155 ms |
78284 KB |
Output is correct |
19 |
Correct |
30 ms |
75476 KB |
Output is correct |
20 |
Correct |
29 ms |
75476 KB |
Output is correct |
21 |
Correct |
28 ms |
75400 KB |
Output is correct |
22 |
Correct |
29 ms |
75440 KB |
Output is correct |
23 |
Correct |
30 ms |
75416 KB |
Output is correct |
24 |
Correct |
28 ms |
75476 KB |
Output is correct |
25 |
Correct |
29 ms |
75384 KB |
Output is correct |
26 |
Correct |
31 ms |
75496 KB |
Output is correct |
27 |
Correct |
29 ms |
75476 KB |
Output is correct |
28 |
Correct |
33 ms |
75408 KB |
Output is correct |
29 |
Correct |
29 ms |
75468 KB |
Output is correct |
30 |
Correct |
30 ms |
75476 KB |
Output is correct |
31 |
Correct |
30 ms |
75468 KB |
Output is correct |
32 |
Correct |
29 ms |
75512 KB |
Output is correct |
33 |
Correct |
29 ms |
75412 KB |
Output is correct |
34 |
Correct |
31 ms |
75512 KB |
Output is correct |
35 |
Correct |
29 ms |
75468 KB |
Output is correct |
36 |
Correct |
32 ms |
75476 KB |
Output is correct |
37 |
Correct |
32 ms |
75440 KB |
Output is correct |
38 |
Correct |
32 ms |
75384 KB |
Output is correct |
39 |
Correct |
30 ms |
75396 KB |
Output is correct |
40 |
Incorrect |
321 ms |
85868 KB |
Output isn't correct |
41 |
Halted |
0 ms |
0 KB |
- |