#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int ll
typedef pair<int,int> pi;
typedef vector <ll> vi;
typedef vector <pi> vpi;
typedef pair<pi, ll> pii;
typedef set <ll> si;
typedef long double ld;
#define f first
#define s second
#define mp make_pair
#define FOR(i,s,e) for(int i=s;i<=ll(e);++i)
#define DEC(i,s,e) for(int i=s;i>=ll(e);--i)
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define lbd(x, y) lower_bound(all(x), y)
#define ubd(x, y) upper_bound(all(x), y)
#define aFOR(i,x) for (auto i: x)
#define mem(x,i) memset(x,i,sizeof x)
#define fast ios_base::sync_with_stdio(false),cin.tie(0)
#define MOD 1000000007
#define maxn 300010
#define data data1
struct data{
int llen, rlen, lval, rval, sz, val, sm;
data(int _sz, int _val, int _llen, int _rlen, int _lval, int _rval, int _sm){
llen = _llen; val = _val; rlen = _rlen, lval = _lval, rval = _rval; sz = _sz;
sm = _sm;
}
};
data merge(data x, data y){
int lval = x.lval, rval = y.rval;
int llen, rlen;
if (x.llen == x.sz && x.rval == y.lval) llen = x.llen + y.llen;
else llen = x.llen;
if (y.rlen == y.sz && y.lval == x.rval) rlen = y.rlen + x.rlen;
else rlen = y.rlen;
int val = max(x.val, y.val);
if (x.rval == y.lval) val = max(val, x.rlen + y.llen);
return data(x.sz + y.sz, val, llen, rlen, lval, rval, x.sm + y.sm);
}
int N,Q;
int A[maxn],B[maxn];
struct node{
int s,e,m,lazyadd=0,lazyset=0;
bool lazyset_flag = 0;
data dat = data(0,0,0,0,0,0,0);
node *l,*r;
node (int ss,int ee){
s = ss; e = ee; m = (s + e) / 2;
if (s == e){
dat = data(1, 1, 1, 1, B[s], B[s],B[s]);
}else{
l = new node(s,m); r = new node(m+1,e);
dat = merge(l->dat, r->dat);
}
}
void prop(){
if (lazyadd != 0){
dat.lval += lazyadd; dat.rval += lazyadd; dat.sm += lazyadd * (e-s+1);
}
if (lazyset_flag){
dat = data(e-s+1,e-s+1,e-s+1,e-s+1,lazyset,lazyset,(e-s+1)*lazyset);
}
if (s != e){
if (lazyset_flag){
l->lazyset_flag = r->lazyset_flag = 1;
l->lazyadd = r->lazyadd = 0;
l->lazyset = r->lazyset = lazyset;
}
if (lazyadd != 0){
if (l->lazyset_flag) l->lazyset += lazyadd;
else l->lazyadd += lazyadd;
if (r->lazyset_flag) r->lazyset += lazyadd;
else r->lazyadd += lazyadd;
}
}
lazyadd = 0; lazyset_flag = 0; lazyset = 0;
}
void set(int a,int b,int c){
prop();
if (a <= s && e <= b){
lazyset_flag = 1; lazyset = c; lazyadd = 0;
prop();
}else if (a > e || s > b) return;
else{
l->set(a,b,c); r->set(a,b,c);
l->prop(); r->prop();
dat = merge(l->dat, r->dat);
}
}
void add(int a,int b,int c){
prop();
if (a <= s && e <= b){
if (lazyset_flag) lazyset += c;
else lazyadd += c;
prop();
}else if (a > e || s > b) return;
else{
l->add(a,b,c); r->add(a,b,c);
l->prop(); r->prop();
dat = merge(l->dat, r->dat);
}
}
int qry(int a,int b){ // Largest contiguous equal sequence
if (a > b) return 0;
if (a == b) return 1;
prop();
if (a <= s && e <= b) return dat.val;
else if (a > e || s > b) return 0;
else{
l->prop(); r->prop();
int res = max(l->qry(a,b), r->qry(a,b));
l->prop(); r->prop();
if (l->dat.rval == r->dat.lval){
int x = l->e - l->dat.rlen + 1;
int y = r->s + r->dat.llen - 1;
x = max(x, a); y = min(y, b);
res = max(res, y - x + 1);;
}
return res;
}
}
int sum(int a,int b){
prop();
if (a <= s && e <= b) return dat.sm;
else if (a > e || s > b) return 0;
else return l->sum(a,b)+ r->sum(a,b);
}
}*root;
int qryA(int p){
return A[p];
if (p == 1) return A[1];
else return A[1] + root->sum(1, p-1);
}
int32_t main(){
fast;
cin >> N >> Q;
FOR(i,1,N) cin >> A[i];
FOR(i,1,N-1) B[i] = A[i+1] - A[i];
if (N > 1) root = new node(1,N-1);
int t,l,r,s,c;
FOR(q,1,Q){
cin >> t;
if (t == 1){ // add
cin >> l >> r >> s >> c;
if (N == 1) continue;
if (l > 1){
root->add(l-1,l-1,s);
//~ cout << "ADD " << l-1 << ' ' << l-1 << ' ' << s << '\n';
}
if (r < N){
root->add(r,r,-(s+(r-l)*c));
//~ cout << "ADD " << r << ' ' << r << ' ' << -(s+(r-l)*c) << '\n';
}
if (l < r) root->add(l,r-1,c);
//~ cout << "ADD " << l << ' ' << r-1 << ' ' << c << '\n';
//~ FOR(i,l,r) A[i] += s + (i-l)*c;
if (l == 1) A[1] += s;
}else if (t == 2){ //set
cin >> l >> r >> s >> c;
if (N == 1) continue;
//~ FOR(i,l,r) A[i] = s + (i-l)*c;
if (l > 1) root->set(l-1,l-1,s-qryA(l-1));
if (r < N) root->set(r,r,qryA(r+1)-(s+(r-l)*c));
if (l < r) root->set(l,r-1,c);
if (l == 1) A[1] = s;
}else{
cin >> l >> r;
if (N == 1 || l == r) cout << 1 << '\n';
else cout << root->qry(l,r-1) + 1 << '\n';
}
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
199 ms |
88668 KB |
Output is correct |
2 |
Correct |
78 ms |
3496 KB |
Output is correct |
3 |
Correct |
91 ms |
3572 KB |
Output is correct |
4 |
Correct |
81 ms |
3488 KB |
Output is correct |
5 |
Correct |
82 ms |
3664 KB |
Output is correct |
6 |
Correct |
80 ms |
3592 KB |
Output is correct |
7 |
Correct |
83 ms |
3456 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
1 ms |
336 KB |
Output is correct |
10 |
Correct |
1 ms |
344 KB |
Output is correct |
11 |
Correct |
172 ms |
88832 KB |
Output is correct |
12 |
Correct |
174 ms |
88648 KB |
Output is correct |
13 |
Correct |
175 ms |
88952 KB |
Output is correct |
14 |
Correct |
173 ms |
89048 KB |
Output is correct |
15 |
Correct |
176 ms |
88840 KB |
Output is correct |
16 |
Correct |
185 ms |
88648 KB |
Output is correct |
17 |
Correct |
227 ms |
88680 KB |
Output is correct |
18 |
Correct |
184 ms |
88612 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
596 KB |
Output is correct |
2 |
Incorrect |
2 ms |
332 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
486 ms |
87160 KB |
Output is correct |
2 |
Correct |
97 ms |
3012 KB |
Output is correct |
3 |
Correct |
91 ms |
3016 KB |
Output is correct |
4 |
Correct |
119 ms |
2948 KB |
Output is correct |
5 |
Correct |
89 ms |
3140 KB |
Output is correct |
6 |
Correct |
114 ms |
3156 KB |
Output is correct |
7 |
Correct |
100 ms |
3060 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
1 ms |
344 KB |
Output is correct |
10 |
Correct |
1 ms |
344 KB |
Output is correct |
11 |
Correct |
565 ms |
85844 KB |
Output is correct |
12 |
Correct |
449 ms |
87248 KB |
Output is correct |
13 |
Correct |
600 ms |
85844 KB |
Output is correct |
14 |
Correct |
515 ms |
85768 KB |
Output is correct |
15 |
Correct |
511 ms |
87188 KB |
Output is correct |
16 |
Correct |
649 ms |
87828 KB |
Output is correct |
17 |
Correct |
541 ms |
87716 KB |
Output is correct |
18 |
Correct |
568 ms |
87820 KB |
Output is correct |
19 |
Correct |
477 ms |
87204 KB |
Output is correct |
20 |
Correct |
536 ms |
87176 KB |
Output is correct |
21 |
Correct |
437 ms |
87084 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
897 ms |
90228 KB |
Output is correct |
2 |
Incorrect |
153 ms |
3652 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
486 ms |
87160 KB |
Output is correct |
2 |
Correct |
97 ms |
3012 KB |
Output is correct |
3 |
Correct |
91 ms |
3016 KB |
Output is correct |
4 |
Correct |
119 ms |
2948 KB |
Output is correct |
5 |
Correct |
89 ms |
3140 KB |
Output is correct |
6 |
Correct |
114 ms |
3156 KB |
Output is correct |
7 |
Correct |
100 ms |
3060 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
1 ms |
344 KB |
Output is correct |
10 |
Correct |
1 ms |
344 KB |
Output is correct |
11 |
Correct |
565 ms |
85844 KB |
Output is correct |
12 |
Correct |
449 ms |
87248 KB |
Output is correct |
13 |
Correct |
600 ms |
85844 KB |
Output is correct |
14 |
Correct |
515 ms |
85768 KB |
Output is correct |
15 |
Correct |
511 ms |
87188 KB |
Output is correct |
16 |
Correct |
649 ms |
87828 KB |
Output is correct |
17 |
Correct |
541 ms |
87716 KB |
Output is correct |
18 |
Correct |
568 ms |
87820 KB |
Output is correct |
19 |
Correct |
477 ms |
87204 KB |
Output is correct |
20 |
Correct |
536 ms |
87176 KB |
Output is correct |
21 |
Correct |
437 ms |
87084 KB |
Output is correct |
22 |
Correct |
1660 ms |
89464 KB |
Output is correct |
23 |
Correct |
168 ms |
3460 KB |
Output is correct |
24 |
Correct |
171 ms |
3528 KB |
Output is correct |
25 |
Correct |
160 ms |
3460 KB |
Output is correct |
26 |
Correct |
175 ms |
3520 KB |
Output is correct |
27 |
Correct |
181 ms |
3496 KB |
Output is correct |
28 |
Correct |
168 ms |
3504 KB |
Output is correct |
29 |
Correct |
1 ms |
336 KB |
Output is correct |
30 |
Correct |
1 ms |
316 KB |
Output is correct |
31 |
Correct |
1 ms |
324 KB |
Output is correct |
32 |
Correct |
1596 ms |
86680 KB |
Output is correct |
33 |
Correct |
1761 ms |
89356 KB |
Output is correct |
34 |
Correct |
1659 ms |
86632 KB |
Output is correct |
35 |
Correct |
1555 ms |
86868 KB |
Output is correct |
36 |
Correct |
1176 ms |
86492 KB |
Output is correct |
37 |
Correct |
1204 ms |
86508 KB |
Output is correct |
38 |
Correct |
1269 ms |
86452 KB |
Output is correct |
39 |
Correct |
1605 ms |
85500 KB |
Output is correct |
40 |
Correct |
1554 ms |
89324 KB |
Output is correct |
41 |
Correct |
1770 ms |
89512 KB |
Output is correct |
42 |
Correct |
1536 ms |
89372 KB |
Output is correct |
43 |
Correct |
1454 ms |
82408 KB |
Output is correct |
44 |
Correct |
1530 ms |
82284 KB |
Output is correct |
45 |
Correct |
1612 ms |
83532 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
199 ms |
88668 KB |
Output is correct |
2 |
Correct |
78 ms |
3496 KB |
Output is correct |
3 |
Correct |
91 ms |
3572 KB |
Output is correct |
4 |
Correct |
81 ms |
3488 KB |
Output is correct |
5 |
Correct |
82 ms |
3664 KB |
Output is correct |
6 |
Correct |
80 ms |
3592 KB |
Output is correct |
7 |
Correct |
83 ms |
3456 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
1 ms |
336 KB |
Output is correct |
10 |
Correct |
1 ms |
344 KB |
Output is correct |
11 |
Correct |
172 ms |
88832 KB |
Output is correct |
12 |
Correct |
174 ms |
88648 KB |
Output is correct |
13 |
Correct |
175 ms |
88952 KB |
Output is correct |
14 |
Correct |
173 ms |
89048 KB |
Output is correct |
15 |
Correct |
176 ms |
88840 KB |
Output is correct |
16 |
Correct |
185 ms |
88648 KB |
Output is correct |
17 |
Correct |
227 ms |
88680 KB |
Output is correct |
18 |
Correct |
184 ms |
88612 KB |
Output is correct |
19 |
Correct |
3 ms |
596 KB |
Output is correct |
20 |
Incorrect |
2 ms |
332 KB |
Output isn't correct |
21 |
Halted |
0 ms |
0 KB |
- |