#include<bits/stdc++.h>
#include<ext/rope>
using namespace std;
using namespace __gnu_cxx;
#define fi first
#define se second
#define fastio ios_base::sync_with_stdio(false);cin.tie(0)
#define fopen freopen("input.txt", "r", stdin)
#define eb emplace_back
#define em emplace
#define prec(a) cout<<fixed;cout.precision(a);
#define all(a) (a).begin(), (a).end()
typedef long long ll;typedef long double ld;typedef unsigned long long ul;typedef unsigned int ui;typedef pair<int,int> pii;typedef pair<ll,ll> pll;
typedef tuple<int,int,int> tiii;
const ll INF = 2e18;
const int inf = 2e9;
template<class T>
void pr(T t) {cerr << t << " ";}
template<class T, class ...Args>
void pr(T a, Args ...args) {cerr << a << " ";pr(args...);}
template<class ...Args>
void prl(Args ...args) {pr(args...);cerr << endl;}
int n,q,in[300010][2];
struct Node{
ll b,x,ls,le,rs,re,si=0;
Node(){};
Node(ll bb,ll xx,ll i,ll j,ll k,ll l){b=bb;x=xx;ls=i;le=j;rs=k;re=l;si=0;}
Node operator +(Node B){
B.x--;B.ls--;B.le--;
Node p = Node(b,x,ls,le,rs,re);
if(p.re>B.x&&B.x>=p.rs) p.x-=(p.re-B.x);
else if(p.rs>B.x){
//prl("in case of", ls,le,rs,re);
if(p.rs!=p.re) p.x = p.rs - si;
p.b+=(p.rs-B.x);
}
p.b+=B.b;
p.si = si + B.si + 1;
if(B.re==B.rs){
p.rs=B.rs;
p.re=B.re;
return p;
}
ll t = B.re-B.rs, ss = B.rs-B.si-1, ee = B.re-B.si-1;
if(p.rs<=ss) p.rs=B.rs;
else if(p.rs>=ee) p.rs=B.re;
else p.rs = B.rs + min(t,p.rs-ss);
if(p.re<=ss) p.re=B.rs;
else if(p.re>=ee) p.re=B.re;
else p.re = B.rs + min(t,p.re-ss);
return p;
}
void pr(){
//prl("b=",b,"x=",x,"[",ls,",",le,"]"," [",rs,",",re,"]");
}
};
vector<Node> help;
struct SEG{
Node val[1200000];
void init(int x, int l, int r, bool t){
if(l==r){
if(t)val[x]=Node(0,in[l][1],in[l][0],in[l][1],in[l][0],in[l][1]);
else val[x]=Node(0,in[n-l][1],in[n-l][0],in[n-l][1],in[n-l][0],in[n-l][1]);
return ;
}
init(x*2,l,(l+r)/2,t);
init(x*2+1,(l+r)/2+1,r,t);
val[x]=val[x*2]+val[x*2+1];
}
void gang(int x, int l, int r, int ind, bool t){
if(r<ind||ind<l) return ;
if(l==r){
if(t)val[x]=Node(0,in[l][1],in[l][0],in[l][1],in[l][0],in[l][1]);
else val[x]=Node(0,in[n-l][1],in[n-l][0],in[n-l][1],in[n-l][0],in[n-l][1]);
return ;
}
gang(x*2,l,(l+r)/2,ind,t);
gang(x*2+1,(l+r)/2+1,r,ind,t);
val[x]=val[x*2]+val[x*2+1];
}
void query(int x, int l, int r,int s, int e){
if(r<s||e<l) return ;
if(s<=l&&r<=e){
help.eb(val[x]);return ;
}
query(x*2,l,(l+r)/2,s,e);
query(x*2+1,(l+r)/2+1,r,s,e);
}
void debug(int x, int l, int r){
val[x].pr();
if(l==r)return ;
debug(x*2,l,(l+r)/2);debug(x*2+1,(l+r)/2+1,r);
}
}seg1, seg2;
ll eval(ll s, ll e){
for(int i=help.size()-2;i>=0;i--) help[i]=help[i]+help[i+1];
s = max(help[0].ls,s);
ll ret = help[0].b + max(s-help[0].x,0LL);
if(help[0].rs==help[0].re){
ret+=max(help[0].re+1-e,0LL);
return ret;
}
ll ss = help[0].rs-help[0].si;
ll t = help[0].rs+1;
if(s>ss) t = help[0].rs + min(help[0].re-help[0].rs,s-ss)+1;
ret+=max(t-e,0LL);
return ret;
}
void chk(int s, int e, int x,int y){
ll sum=max(0, x - in[s][1]);
x=max(x,in[s][0]);
prl("query", s,e, x, y,"start : ", sum);
x = min(x, in[s][1]);
for(int i=s;i<=e;i++){
x++;
ll t = max(0,x-in[i][1]);
sum+=t;
x = min(x,in[i][1]);
x = max(x, in[i][0]);
prl("i=",i,"h=",x,"Sum=",sum,"delta=",t);
}
sum = sum + max(0, x-y);
prl("end",sum);
}
int main(){
//fopen;
fastio;
cin>>n>>q;
for(int i=1;i<n;i++){
cin>>in[i][0]>>in[i][1];
in[i][1]--;
}
seg1.init(1,1,n-1,1);
seg2.init(1,1,n-1,0);
//prl("seg1");seg1.debug(1,1,n-1);
//prl("seg2");seg2.debug(1,1,n-1);
//prl("\n\n");
while(q--){
int a,b,c,d;
cin>>a;
if(a==1){
cin>>a>>b>>c;
in[a][0]=b;in[a][1]=c-1;
seg1.gang(1,1,n-1,a,1);
seg2.gang(1,1,n-1,n-a,0);
/*
prl("after query=================");
prl("seg1");seg1.debug(1,1,n-1);
prl("seg2");seg2.debug(1,1,n-1);
*/
}
else{
cin>>a>>b>>c>>d;
help.clear();
ll ans=0;
if(a<c){
seg1.query(1,1,n-1,a,c-1);
ans = eval(b,d);
//chk(a,c-1,b,d);
}
else if(a>c){
a = n-a;c = n-c;
seg2.query(1,1,n-1,a+1,c);
ans = eval(b,d);
}
else ans = max(b-d,0);
cout<<ans<<"\n";
}
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
68 ms |
131836 KB |
Output is correct |
2 |
Correct |
67 ms |
131832 KB |
Output is correct |
3 |
Correct |
66 ms |
131832 KB |
Output is correct |
4 |
Correct |
67 ms |
131832 KB |
Output is correct |
5 |
Correct |
67 ms |
131832 KB |
Output is correct |
6 |
Correct |
68 ms |
131960 KB |
Output is correct |
7 |
Correct |
64 ms |
131836 KB |
Output is correct |
8 |
Correct |
67 ms |
131832 KB |
Output is correct |
9 |
Correct |
66 ms |
131852 KB |
Output is correct |
10 |
Correct |
66 ms |
131832 KB |
Output is correct |
11 |
Correct |
76 ms |
131960 KB |
Output is correct |
12 |
Correct |
68 ms |
131960 KB |
Output is correct |
13 |
Correct |
70 ms |
131960 KB |
Output is correct |
14 |
Correct |
68 ms |
131960 KB |
Output is correct |
15 |
Correct |
68 ms |
131960 KB |
Output is correct |
16 |
Correct |
70 ms |
131960 KB |
Output is correct |
17 |
Correct |
71 ms |
131960 KB |
Output is correct |
18 |
Correct |
69 ms |
132024 KB |
Output is correct |
19 |
Correct |
70 ms |
131960 KB |
Output is correct |
20 |
Correct |
68 ms |
131960 KB |
Output is correct |
21 |
Correct |
68 ms |
131964 KB |
Output is correct |
22 |
Correct |
71 ms |
131960 KB |
Output is correct |
23 |
Correct |
70 ms |
131960 KB |
Output is correct |
24 |
Correct |
70 ms |
131960 KB |
Output is correct |
25 |
Correct |
69 ms |
131960 KB |
Output is correct |
26 |
Correct |
71 ms |
131964 KB |
Output is correct |
27 |
Correct |
69 ms |
131952 KB |
Output is correct |
28 |
Correct |
68 ms |
131964 KB |
Output is correct |
29 |
Correct |
69 ms |
131960 KB |
Output is correct |
30 |
Correct |
68 ms |
131960 KB |
Output is correct |
31 |
Correct |
68 ms |
131960 KB |
Output is correct |
32 |
Correct |
69 ms |
131960 KB |
Output is correct |
33 |
Correct |
68 ms |
131960 KB |
Output is correct |
34 |
Correct |
77 ms |
131960 KB |
Output is correct |
35 |
Correct |
70 ms |
131960 KB |
Output is correct |
36 |
Correct |
68 ms |
131960 KB |
Output is correct |
37 |
Correct |
71 ms |
131960 KB |
Output is correct |
38 |
Correct |
70 ms |
131960 KB |
Output is correct |
39 |
Correct |
68 ms |
131960 KB |
Output is correct |
40 |
Correct |
69 ms |
131960 KB |
Output is correct |
41 |
Runtime error |
462 ms |
524292 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
691 ms |
138352 KB |
Output is correct |
2 |
Correct |
697 ms |
153336 KB |
Output is correct |
3 |
Correct |
710 ms |
153720 KB |
Output is correct |
4 |
Correct |
712 ms |
153212 KB |
Output is correct |
5 |
Correct |
706 ms |
153928 KB |
Output is correct |
6 |
Correct |
721 ms |
153724 KB |
Output is correct |
7 |
Correct |
706 ms |
153796 KB |
Output is correct |
8 |
Correct |
707 ms |
154488 KB |
Output is correct |
9 |
Execution timed out |
551 ms |
149624 KB |
Time limit exceeded (wall clock) |
10 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
68 ms |
131836 KB |
Output is correct |
2 |
Correct |
67 ms |
131832 KB |
Output is correct |
3 |
Correct |
66 ms |
131832 KB |
Output is correct |
4 |
Correct |
67 ms |
131832 KB |
Output is correct |
5 |
Correct |
67 ms |
131832 KB |
Output is correct |
6 |
Correct |
68 ms |
131960 KB |
Output is correct |
7 |
Correct |
64 ms |
131836 KB |
Output is correct |
8 |
Correct |
67 ms |
131832 KB |
Output is correct |
9 |
Correct |
66 ms |
131852 KB |
Output is correct |
10 |
Correct |
66 ms |
131832 KB |
Output is correct |
11 |
Correct |
76 ms |
131960 KB |
Output is correct |
12 |
Correct |
68 ms |
131960 KB |
Output is correct |
13 |
Correct |
70 ms |
131960 KB |
Output is correct |
14 |
Correct |
68 ms |
131960 KB |
Output is correct |
15 |
Correct |
68 ms |
131960 KB |
Output is correct |
16 |
Correct |
70 ms |
131960 KB |
Output is correct |
17 |
Correct |
71 ms |
131960 KB |
Output is correct |
18 |
Correct |
69 ms |
132024 KB |
Output is correct |
19 |
Correct |
70 ms |
131960 KB |
Output is correct |
20 |
Correct |
68 ms |
131960 KB |
Output is correct |
21 |
Correct |
68 ms |
131964 KB |
Output is correct |
22 |
Correct |
71 ms |
131960 KB |
Output is correct |
23 |
Correct |
70 ms |
131960 KB |
Output is correct |
24 |
Correct |
70 ms |
131960 KB |
Output is correct |
25 |
Correct |
69 ms |
131960 KB |
Output is correct |
26 |
Correct |
71 ms |
131964 KB |
Output is correct |
27 |
Correct |
69 ms |
131952 KB |
Output is correct |
28 |
Correct |
68 ms |
131964 KB |
Output is correct |
29 |
Correct |
69 ms |
131960 KB |
Output is correct |
30 |
Correct |
68 ms |
131960 KB |
Output is correct |
31 |
Correct |
68 ms |
131960 KB |
Output is correct |
32 |
Correct |
69 ms |
131960 KB |
Output is correct |
33 |
Correct |
68 ms |
131960 KB |
Output is correct |
34 |
Correct |
77 ms |
131960 KB |
Output is correct |
35 |
Correct |
70 ms |
131960 KB |
Output is correct |
36 |
Correct |
68 ms |
131960 KB |
Output is correct |
37 |
Correct |
71 ms |
131960 KB |
Output is correct |
38 |
Correct |
70 ms |
131960 KB |
Output is correct |
39 |
Correct |
68 ms |
131960 KB |
Output is correct |
40 |
Correct |
69 ms |
131960 KB |
Output is correct |
41 |
Runtime error |
462 ms |
524292 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |