提交时间:2023-08-14 12:29:01

运行 ID: 98219

#include<bits/stdc++.h> #define N 200010 #define int long long using namespace std; int n,m,op,a,b,c,d; int x[N],y[N],q[N*4]; void pushup(int bh){q[bh]=q[bh*2]+q[bh*2+1];} void build(int bh,int l,int r){ if(l==r){ q[bh]=abs(x[l]-x[l+1]); return; } int mid=(l+r)>>1; build(bh*2,l,mid),build(bh*2+1,mid+1,r); pushup(bh); } void upd(int bh,int l,int r,int x,int p){ if(!x||x>n-2) return; if(l==r&&l==x){ q[bh]=p; return; } int mid=(l+r)>>1; if(x<=mid) upd(bh*2,l,mid,x,p); else upd(bh*2+1,mid+1,r,x,p); pushup(bh); } int query(int bh,int l,int r,int L,int R){ if(L>R) return 0; if(l>=L&&r<=R) return q[bh]; int mid=(l+r)>>1,ans=0; if(L<=mid) ans=query(bh*2,l,mid,L,R); if(R>mid) ans+=query(bh*2+1,mid+1,r,L,R); return ans; } signed main(){ cin>>n>>m; for(int i=1;i<n;i++) cin>>x[i]>>y[i]; x[0]=y[0]=1; build(1,1,n-2); while(m--){ cin>>op; if(op==1) cin>>a>>b>>c,x[a]=b,y[a]=c,upd(1,1,n-2,a-1,abs(x[a-1]-x[a])),upd(1,1,n-2,a,abs(x[a]-x[a+1])); else{ cin>>a>>b>>c>>d; int s=max(a,b),t=max(c,d); if(s>t) swap(s,t),swap(a,c),swap(b,d); if(s==t) cout<<abs(a-c)+abs(b-d)<<endl; else cout<<min(abs(a-x[s]),abs(b-y[s]))+query(1,1,n-2,s,t-2)+min(abs(c-x[t-1]),abs(d-y[t-1]))+t-s<<endl; } } return 0; }