#include <iostream>
#include <algorithm>
using namespace std;
int N, Q;
long long D[300010], B[300010];
struct treedata {
int len; long long val;
treedata() {}
treedata(int _len, long long _val): len(_len), val(_val) {}
static bool cmp(treedata lhs, treedata rhs) {
return lhs.len < rhs.len;
}
};
struct qval {
int len; long long sum;
treedata prefix, suffix, subarray;
qval() {}
qval(long long val) {
len = 1; sum = val;
subarray = treedata(0, 0);
prefix = suffix = treedata(1, val);
}
void add(long long val) {
prefix.val += val;
suffix.val += val;
subarray.val += val;
sum += val * len;
}
void set(long long val) {
prefix.val = suffix.val = subarray.val = val;
prefix.len = suffix.len = len;
subarray.len = max(0, len - 2);
sum = val * len;
}
};
struct node {
int S, E, M;
qval V;
bool lset;
long long lazy_set, lazy_add;
node *L, *R;
node (int _S, int _E): S(_S), E(_E), M((S + E) / 2) {
lset = false;
lazy_set = lazy_add = 0;
if (S == E) {
V = qval(B[S]);
return;
}
L = new node(S, M); R = new node(M + 1, E);
V = combine(L->V, R->V);
}
qval combine(qval left, qval right) {
qval ret;
ret.len = left.len + right.len;
ret.sum = left.sum + right.sum;
ret.prefix = left.prefix;
if (left.prefix.len == left.len && left.prefix.val == right.prefix.val)
ret.prefix = treedata(left.len + right.prefix.len, left.prefix.val);
ret.suffix = right.suffix;
if (right.suffix.len == right.len && left.suffix.val == right.suffix.val)
ret.suffix = treedata(right.len + left.suffix.len, right.suffix.val);
ret.subarray = max(left.subarray, right.subarray, treedata::cmp);
if (min(left.len - 1, left.suffix.len) > ret.subarray.len)
ret.subarray = treedata(min(left.len - 1, left.suffix.len), left.suffix.val);
if (min(right.len - 1, right.prefix.len) > ret.subarray.len)
ret.subarray = treedata(min(right.len - 1, right.prefix.len), right.prefix.val);
if (left.suffix.val == right.prefix.val && \
min(left.len - 1, left.suffix.len) + \
min(right.len - 1, right.prefix.len) > ret.subarray.len)
ret.subarray = treedata(min(left.len - 1, left.suffix.len) + \
min(right.len - 1, right.prefix.len), left.suffix.val);
return ret;
}
void push() {
if (lset) {
L->rset(lazy_set);
R->rset(lazy_set);
lset = false;
lazy_set = 0;
}
if (lazy_add) {
L->radd(lazy_add);
R->radd(lazy_add);
lazy_add = 0;
}
}
void radd(long long QV) {
if (lset) V.set(lazy_set += QV);
else {
lazy_add += QV;
V.add(QV);
}
}
void rset(long long QV) {
lset = true;
lazy_add = 0;
V.set(lazy_set = QV);
}
qval query(int QS, int QE) {
if (QS <= S && E <= QE) return V;
push();
if (QE <= M) return L->query(QS, QE);
if (QS > M) return R->query(QS, QE);
return combine(L->query(QS, M), R->query(M + 1, QE));
}
void add(int QS, int QE, long long QV) {
if (QS <= S && E <= QE) return radd(QV);
push();
if (QE <= M) L->add(QS, QE, QV);
else if (QS > M) R->add(QS, QE, QV);
else {
L->add(QS, M, QV);
R->add(M + 1, QE, QV);
}
V = combine(L->V, R->V);
}
void set(int QS, int QE, long long QV) {
if (QS <= S && E <= QE) return rset(QV);
push();
if (QE <= M) L->set(QS, QE, QV);
else if (QS > M) R->set(QS, QE, QV);
else {
L->set(QS, M, QV);
R->set(M + 1, QE, QV);
}
V = combine(L->V, R->V);
}
} *root;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> Q;
for (int a = 1; a <= N; ++a) {
cin >> D[a];
B[a] = D[a] - D[a - 1];
}
root = new node(1, N);
while (Q--) {
int op;
cin >> op;
if (op == 1) {
int L, R; long long S, C;
cin >> L >> R >> S >> C;
root->add(L, L, S);
if (L != R) root->add(L + 1, R, C);
if (R != N) root->add(R + 1, R + 1, -(S + (R - L) * C));
} else if (op == 2) {
int L, R; long long S, C;
cin >> L >> R >> S >> C;
long long old_sum = root->query(L, R).sum;
long long prefix = (L == 1 ? 0 : root->query(1, L - 1).sum);
root->set(L, L, S - prefix);
if (L != R) root->set(L + 1, R, C);
if (R != N) {
long long new_sum = (S - prefix) + (R - L) * C;
root->add(R + 1, R + 1, old_sum - new_sum);
}
} else {
int L, R;
cin >> L >> R;
qval ret = root->query(L, R);
int len = max({ret.prefix.len, ret.subarray.len + 1, ret.suffix.len + 1});
len = min(len, ret.len);
cout << len << '\n';
}
}
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
322 ms |
80876 KB |
Output is correct |
2 |
Correct |
126 ms |
632 KB |
Output is correct |
3 |
Correct |
125 ms |
632 KB |
Output is correct |
4 |
Correct |
123 ms |
760 KB |
Output is correct |
5 |
Correct |
127 ms |
760 KB |
Output is correct |
6 |
Correct |
122 ms |
760 KB |
Output is correct |
7 |
Correct |
127 ms |
676 KB |
Output is correct |
8 |
Correct |
1 ms |
384 KB |
Output is correct |
9 |
Correct |
1 ms |
384 KB |
Output is correct |
10 |
Correct |
1 ms |
384 KB |
Output is correct |
11 |
Correct |
325 ms |
80896 KB |
Output is correct |
12 |
Correct |
325 ms |
80760 KB |
Output is correct |
13 |
Correct |
330 ms |
81016 KB |
Output is correct |
14 |
Correct |
328 ms |
81016 KB |
Output is correct |
15 |
Correct |
323 ms |
81016 KB |
Output is correct |
16 |
Correct |
328 ms |
80760 KB |
Output is correct |
17 |
Correct |
323 ms |
80760 KB |
Output is correct |
18 |
Correct |
326 ms |
80760 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
640 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
3 |
Correct |
1 ms |
384 KB |
Output is correct |
4 |
Correct |
1 ms |
384 KB |
Output is correct |
5 |
Correct |
1 ms |
384 KB |
Output is correct |
6 |
Correct |
2 ms |
384 KB |
Output is correct |
7 |
Correct |
2 ms |
384 KB |
Output is correct |
8 |
Correct |
2 ms |
640 KB |
Output is correct |
9 |
Correct |
2 ms |
640 KB |
Output is correct |
10 |
Correct |
2 ms |
640 KB |
Output is correct |
11 |
Correct |
2 ms |
640 KB |
Output is correct |
12 |
Correct |
2 ms |
640 KB |
Output is correct |
13 |
Correct |
2 ms |
640 KB |
Output is correct |
14 |
Correct |
2 ms |
640 KB |
Output is correct |
15 |
Correct |
2 ms |
640 KB |
Output is correct |
16 |
Correct |
2 ms |
640 KB |
Output is correct |
17 |
Correct |
2 ms |
640 KB |
Output is correct |
18 |
Correct |
2 ms |
640 KB |
Output is correct |
19 |
Correct |
1 ms |
384 KB |
Output is correct |
20 |
Correct |
1 ms |
384 KB |
Output is correct |
21 |
Correct |
1 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
388 ms |
81272 KB |
Output is correct |
2 |
Correct |
83 ms |
1016 KB |
Output is correct |
3 |
Correct |
83 ms |
1016 KB |
Output is correct |
4 |
Correct |
85 ms |
1016 KB |
Output is correct |
5 |
Correct |
92 ms |
1016 KB |
Output is correct |
6 |
Correct |
91 ms |
1016 KB |
Output is correct |
7 |
Correct |
86 ms |
1016 KB |
Output is correct |
8 |
Correct |
1 ms |
384 KB |
Output is correct |
9 |
Correct |
0 ms |
384 KB |
Output is correct |
10 |
Correct |
1 ms |
384 KB |
Output is correct |
11 |
Correct |
394 ms |
81136 KB |
Output is correct |
12 |
Correct |
345 ms |
81272 KB |
Output is correct |
13 |
Correct |
400 ms |
81016 KB |
Output is correct |
14 |
Correct |
422 ms |
81144 KB |
Output is correct |
15 |
Correct |
381 ms |
81300 KB |
Output is correct |
16 |
Correct |
452 ms |
81528 KB |
Output is correct |
17 |
Correct |
417 ms |
81608 KB |
Output is correct |
18 |
Correct |
473 ms |
81684 KB |
Output is correct |
19 |
Correct |
394 ms |
80872 KB |
Output is correct |
20 |
Correct |
386 ms |
80888 KB |
Output is correct |
21 |
Correct |
353 ms |
80888 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
740 ms |
80504 KB |
Output is correct |
2 |
Correct |
142 ms |
504 KB |
Output is correct |
3 |
Correct |
142 ms |
504 KB |
Output is correct |
4 |
Correct |
140 ms |
504 KB |
Output is correct |
5 |
Correct |
147 ms |
632 KB |
Output is correct |
6 |
Correct |
147 ms |
504 KB |
Output is correct |
7 |
Correct |
148 ms |
568 KB |
Output is correct |
8 |
Correct |
1 ms |
384 KB |
Output is correct |
9 |
Correct |
1 ms |
384 KB |
Output is correct |
10 |
Correct |
1 ms |
384 KB |
Output is correct |
11 |
Correct |
800 ms |
80604 KB |
Output is correct |
12 |
Correct |
759 ms |
80560 KB |
Output is correct |
13 |
Correct |
737 ms |
80632 KB |
Output is correct |
14 |
Correct |
999 ms |
80468 KB |
Output is correct |
15 |
Correct |
1113 ms |
80384 KB |
Output is correct |
16 |
Correct |
827 ms |
80564 KB |
Output is correct |
17 |
Correct |
942 ms |
80588 KB |
Output is correct |
18 |
Correct |
821 ms |
80492 KB |
Output is correct |
19 |
Correct |
865 ms |
80588 KB |
Output is correct |
20 |
Correct |
820 ms |
80388 KB |
Output is correct |
21 |
Correct |
934 ms |
80432 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
388 ms |
81272 KB |
Output is correct |
2 |
Correct |
83 ms |
1016 KB |
Output is correct |
3 |
Correct |
83 ms |
1016 KB |
Output is correct |
4 |
Correct |
85 ms |
1016 KB |
Output is correct |
5 |
Correct |
92 ms |
1016 KB |
Output is correct |
6 |
Correct |
91 ms |
1016 KB |
Output is correct |
7 |
Correct |
86 ms |
1016 KB |
Output is correct |
8 |
Correct |
1 ms |
384 KB |
Output is correct |
9 |
Correct |
0 ms |
384 KB |
Output is correct |
10 |
Correct |
1 ms |
384 KB |
Output is correct |
11 |
Correct |
394 ms |
81136 KB |
Output is correct |
12 |
Correct |
345 ms |
81272 KB |
Output is correct |
13 |
Correct |
400 ms |
81016 KB |
Output is correct |
14 |
Correct |
422 ms |
81144 KB |
Output is correct |
15 |
Correct |
381 ms |
81300 KB |
Output is correct |
16 |
Correct |
452 ms |
81528 KB |
Output is correct |
17 |
Correct |
417 ms |
81608 KB |
Output is correct |
18 |
Correct |
473 ms |
81684 KB |
Output is correct |
19 |
Correct |
394 ms |
80872 KB |
Output is correct |
20 |
Correct |
386 ms |
80888 KB |
Output is correct |
21 |
Correct |
353 ms |
80888 KB |
Output is correct |
22 |
Correct |
1051 ms |
80564 KB |
Output is correct |
23 |
Correct |
144 ms |
632 KB |
Output is correct |
24 |
Correct |
156 ms |
624 KB |
Output is correct |
25 |
Correct |
158 ms |
716 KB |
Output is correct |
26 |
Correct |
160 ms |
712 KB |
Output is correct |
27 |
Correct |
156 ms |
688 KB |
Output is correct |
28 |
Correct |
153 ms |
692 KB |
Output is correct |
29 |
Correct |
1 ms |
384 KB |
Output is correct |
30 |
Correct |
1 ms |
384 KB |
Output is correct |
31 |
Correct |
1 ms |
384 KB |
Output is correct |
32 |
Correct |
1030 ms |
80664 KB |
Output is correct |
33 |
Correct |
1216 ms |
80508 KB |
Output is correct |
34 |
Correct |
1160 ms |
80608 KB |
Output is correct |
35 |
Correct |
1016 ms |
80548 KB |
Output is correct |
36 |
Correct |
824 ms |
80872 KB |
Output is correct |
37 |
Correct |
810 ms |
80812 KB |
Output is correct |
38 |
Correct |
888 ms |
80888 KB |
Output is correct |
39 |
Correct |
1121 ms |
80628 KB |
Output is correct |
40 |
Correct |
1074 ms |
80696 KB |
Output is correct |
41 |
Correct |
1118 ms |
80776 KB |
Output is correct |
42 |
Correct |
1327 ms |
80632 KB |
Output is correct |
43 |
Correct |
1087 ms |
80648 KB |
Output is correct |
44 |
Correct |
1167 ms |
80520 KB |
Output is correct |
45 |
Correct |
1430 ms |
80584 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
322 ms |
80876 KB |
Output is correct |
2 |
Correct |
126 ms |
632 KB |
Output is correct |
3 |
Correct |
125 ms |
632 KB |
Output is correct |
4 |
Correct |
123 ms |
760 KB |
Output is correct |
5 |
Correct |
127 ms |
760 KB |
Output is correct |
6 |
Correct |
122 ms |
760 KB |
Output is correct |
7 |
Correct |
127 ms |
676 KB |
Output is correct |
8 |
Correct |
1 ms |
384 KB |
Output is correct |
9 |
Correct |
1 ms |
384 KB |
Output is correct |
10 |
Correct |
1 ms |
384 KB |
Output is correct |
11 |
Correct |
325 ms |
80896 KB |
Output is correct |
12 |
Correct |
325 ms |
80760 KB |
Output is correct |
13 |
Correct |
330 ms |
81016 KB |
Output is correct |
14 |
Correct |
328 ms |
81016 KB |
Output is correct |
15 |
Correct |
323 ms |
81016 KB |
Output is correct |
16 |
Correct |
328 ms |
80760 KB |
Output is correct |
17 |
Correct |
323 ms |
80760 KB |
Output is correct |
18 |
Correct |
326 ms |
80760 KB |
Output is correct |
19 |
Correct |
2 ms |
640 KB |
Output is correct |
20 |
Correct |
1 ms |
384 KB |
Output is correct |
21 |
Correct |
1 ms |
384 KB |
Output is correct |
22 |
Correct |
1 ms |
384 KB |
Output is correct |
23 |
Correct |
1 ms |
384 KB |
Output is correct |
24 |
Correct |
2 ms |
384 KB |
Output is correct |
25 |
Correct |
2 ms |
384 KB |
Output is correct |
26 |
Correct |
2 ms |
640 KB |
Output is correct |
27 |
Correct |
2 ms |
640 KB |
Output is correct |
28 |
Correct |
2 ms |
640 KB |
Output is correct |
29 |
Correct |
2 ms |
640 KB |
Output is correct |
30 |
Correct |
2 ms |
640 KB |
Output is correct |
31 |
Correct |
2 ms |
640 KB |
Output is correct |
32 |
Correct |
2 ms |
640 KB |
Output is correct |
33 |
Correct |
2 ms |
640 KB |
Output is correct |
34 |
Correct |
2 ms |
640 KB |
Output is correct |
35 |
Correct |
2 ms |
640 KB |
Output is correct |
36 |
Correct |
2 ms |
640 KB |
Output is correct |
37 |
Correct |
1 ms |
384 KB |
Output is correct |
38 |
Correct |
1 ms |
384 KB |
Output is correct |
39 |
Correct |
1 ms |
384 KB |
Output is correct |
40 |
Correct |
388 ms |
81272 KB |
Output is correct |
41 |
Correct |
83 ms |
1016 KB |
Output is correct |
42 |
Correct |
83 ms |
1016 KB |
Output is correct |
43 |
Correct |
85 ms |
1016 KB |
Output is correct |
44 |
Correct |
92 ms |
1016 KB |
Output is correct |
45 |
Correct |
91 ms |
1016 KB |
Output is correct |
46 |
Correct |
86 ms |
1016 KB |
Output is correct |
47 |
Correct |
1 ms |
384 KB |
Output is correct |
48 |
Correct |
0 ms |
384 KB |
Output is correct |
49 |
Correct |
1 ms |
384 KB |
Output is correct |
50 |
Correct |
394 ms |
81136 KB |
Output is correct |
51 |
Correct |
345 ms |
81272 KB |
Output is correct |
52 |
Correct |
400 ms |
81016 KB |
Output is correct |
53 |
Correct |
422 ms |
81144 KB |
Output is correct |
54 |
Correct |
381 ms |
81300 KB |
Output is correct |
55 |
Correct |
452 ms |
81528 KB |
Output is correct |
56 |
Correct |
417 ms |
81608 KB |
Output is correct |
57 |
Correct |
473 ms |
81684 KB |
Output is correct |
58 |
Correct |
394 ms |
80872 KB |
Output is correct |
59 |
Correct |
386 ms |
80888 KB |
Output is correct |
60 |
Correct |
353 ms |
80888 KB |
Output is correct |
61 |
Correct |
740 ms |
80504 KB |
Output is correct |
62 |
Correct |
142 ms |
504 KB |
Output is correct |
63 |
Correct |
142 ms |
504 KB |
Output is correct |
64 |
Correct |
140 ms |
504 KB |
Output is correct |
65 |
Correct |
147 ms |
632 KB |
Output is correct |
66 |
Correct |
147 ms |
504 KB |
Output is correct |
67 |
Correct |
148 ms |
568 KB |
Output is correct |
68 |
Correct |
1 ms |
384 KB |
Output is correct |
69 |
Correct |
1 ms |
384 KB |
Output is correct |
70 |
Correct |
1 ms |
384 KB |
Output is correct |
71 |
Correct |
800 ms |
80604 KB |
Output is correct |
72 |
Correct |
759 ms |
80560 KB |
Output is correct |
73 |
Correct |
737 ms |
80632 KB |
Output is correct |
74 |
Correct |
999 ms |
80468 KB |
Output is correct |
75 |
Correct |
1113 ms |
80384 KB |
Output is correct |
76 |
Correct |
827 ms |
80564 KB |
Output is correct |
77 |
Correct |
942 ms |
80588 KB |
Output is correct |
78 |
Correct |
821 ms |
80492 KB |
Output is correct |
79 |
Correct |
865 ms |
80588 KB |
Output is correct |
80 |
Correct |
820 ms |
80388 KB |
Output is correct |
81 |
Correct |
934 ms |
80432 KB |
Output is correct |
82 |
Correct |
1051 ms |
80564 KB |
Output is correct |
83 |
Correct |
144 ms |
632 KB |
Output is correct |
84 |
Correct |
156 ms |
624 KB |
Output is correct |
85 |
Correct |
158 ms |
716 KB |
Output is correct |
86 |
Correct |
160 ms |
712 KB |
Output is correct |
87 |
Correct |
156 ms |
688 KB |
Output is correct |
88 |
Correct |
153 ms |
692 KB |
Output is correct |
89 |
Correct |
1 ms |
384 KB |
Output is correct |
90 |
Correct |
1 ms |
384 KB |
Output is correct |
91 |
Correct |
1 ms |
384 KB |
Output is correct |
92 |
Correct |
1030 ms |
80664 KB |
Output is correct |
93 |
Correct |
1216 ms |
80508 KB |
Output is correct |
94 |
Correct |
1160 ms |
80608 KB |
Output is correct |
95 |
Correct |
1016 ms |
80548 KB |
Output is correct |
96 |
Correct |
824 ms |
80872 KB |
Output is correct |
97 |
Correct |
810 ms |
80812 KB |
Output is correct |
98 |
Correct |
888 ms |
80888 KB |
Output is correct |
99 |
Correct |
1121 ms |
80628 KB |
Output is correct |
100 |
Correct |
1074 ms |
80696 KB |
Output is correct |
101 |
Correct |
1118 ms |
80776 KB |
Output is correct |
102 |
Correct |
1327 ms |
80632 KB |
Output is correct |
103 |
Correct |
1087 ms |
80648 KB |
Output is correct |
104 |
Correct |
1167 ms |
80520 KB |
Output is correct |
105 |
Correct |
1430 ms |
80584 KB |
Output is correct |
106 |
Correct |
1459 ms |
80804 KB |
Output is correct |
107 |
Correct |
225 ms |
504 KB |
Output is correct |
108 |
Correct |
221 ms |
632 KB |
Output is correct |
109 |
Correct |
215 ms |
588 KB |
Output is correct |
110 |
Correct |
2 ms |
384 KB |
Output is correct |
111 |
Correct |
1 ms |
384 KB |
Output is correct |
112 |
Correct |
1 ms |
384 KB |
Output is correct |
113 |
Correct |
1085 ms |
80768 KB |
Output is correct |
114 |
Correct |
1116 ms |
80632 KB |
Output is correct |
115 |
Correct |
1078 ms |
80660 KB |
Output is correct |
116 |
Correct |
952 ms |
80760 KB |
Output is correct |
117 |
Correct |
1211 ms |
80956 KB |
Output is correct |
118 |
Correct |
882 ms |
80636 KB |
Output is correct |
119 |
Correct |
891 ms |
80748 KB |
Output is correct |
120 |
Correct |
430 ms |
81656 KB |
Output is correct |
121 |
Correct |
490 ms |
81656 KB |
Output is correct |
122 |
Correct |
412 ms |
81656 KB |
Output is correct |
123 |
Correct |
359 ms |
81044 KB |
Output is correct |
124 |
Correct |
361 ms |
81016 KB |
Output is correct |
125 |
Correct |
397 ms |
80888 KB |
Output is correct |
126 |
Correct |
1136 ms |
81020 KB |
Output is correct |
127 |
Correct |
1156 ms |
80936 KB |
Output is correct |
128 |
Correct |
1170 ms |
80940 KB |
Output is correct |
129 |
Correct |
1160 ms |
80716 KB |
Output is correct |
130 |
Correct |
934 ms |
81532 KB |
Output is correct |
131 |
Correct |
889 ms |
81528 KB |
Output is correct |
132 |
Correct |
830 ms |
81512 KB |
Output is correct |
133 |
Correct |
1242 ms |
81088 KB |
Output is correct |
134 |
Correct |
1168 ms |
81016 KB |
Output is correct |
135 |
Correct |
1238 ms |
80924 KB |
Output is correct |
136 |
Correct |
211 ms |
504 KB |
Output is correct |
137 |
Correct |
211 ms |
632 KB |
Output is correct |
138 |
Correct |
208 ms |
632 KB |
Output is correct |