鬼屎

#include <bits/stdc++.h> using namespace std; #define ri register int #define M 2000005 int n,m; long long arr[M],brr[M],crr[M]; struct dian{ int val; int l; }p[M]; struct node{ int l,r; long long flag=0; long long vv; long long val; long long val2; long long pos_val_min; long long pos_val_max; long long pos_real; long long pos_real2; long long pos_vv; }p[M*4]; void build(int i,int l,int r) { p[i].l=l;p[i].r=r; if(l==r) { return ; } int mid=(l+r)>>1; build(i<<1,l,mid); build(i<<1|1,mid+1,r); } void upp(int i,int x) { p[i].val=p[i].val-p[i].pos_real+x; p[i].val2=p[i].val2-p[i].pos_real2+x; p[i].pos_real=x; p[i].pos_real2=x; p[i].pos_val_max=x; p[i].pos_val_min=x; } void down(int i) { int tmp=p[i].flag; p[i<<1].flag=tmp; p[i<<1|1].flag=tmp; upp(i<<1,tmp); upp(i<<1|1,tmp); p[i].flag=0; } void up(int i) { if(p[i<<1].val>=p[i<<1|1].val) { p[i].val=p[i<<1].val; p[i].pos_real=p[i<<1].pos_real; } else { p[i].val=p[i<<1|1].val; p[i].pos_real=p[i<<1|1].pos_real; } /////////////// if(p[i<<1].val2>=p[i<<1|1].val2) { p[i].val2=p[i<<1].val2; p[i].pos_real2=p[i<<1].pos_real2; } else { p[i].val2=p[i<<1|1].val2; p[i].pos_real2=p[i<<1|1].pos_real2; } //////////////// p[i].pos_val_max=max(p[i<<1].pos_val_max,p[i<<1|1].pos_val_max); p[i].pos_val_min=max(p[i<<1|1].pos_val_min,p[i<<1|1].pos_val_min); } void xiu(int l,int r,int i,int x) { if(p[i].pos_val_min>x) return ; if(p[i].l>r||p[i].r<l) return ; if(l<=p[i].l&&p[i].r<=r) { if(p[i].pos_val_max<=x) { p[i].val=p[i].val-p[i].pos_real+x; p[i].val2=p[i].val2-p[i].pos_real2+x; p[i].pos_real=x; p[i].pos_real2=x; p[i].pos_val_max=x; p[i].pos_val_min=x; p[i].flag=x; return ; } } if(p[i].flag) down(); xiu(l,r,i<<1,x); xiu(l,r,i<<1|1,x); up(i); } struct dd{ int val; int pos; }; dd qu(int l,int r,int i,int x) { dd t; t.val=0;t.pos=0; if(p[i].l>r||p[i].r<l) return t; if(l<=p[i].l&&p[i].r<=r) { if(p[i].val>=p[i].val2) { t.val=p[i].val; t.pos=p[i].pos_real; } else { t.val=p[i].val2; t.pos=p[i].pos_real2; } return t; } if(p[i].flag) down(); dd t1=xiu(l,r,i<<1); dd t2=xiu(l,r,i<<1|1); up(i); } long long int main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); cin>>n>>m; for(ri i=1;i<=n;i++) { int tmp; cin>>tmp; arr[i]=arr[i-1]+tmp; } for(ri i=1;i<=n;i++) { int tmp; cin>>tmp; brr[i]=brr[i-1]+tmp; } for(ri i=1;i<=n;i++) { int tmp; cin>>tmp; crr[i]=crr[i-1]+tmp; } for(ri i=1;i<=m;i++) { int a,b,c; cin>>a>>b>>c; dian t; t.l=a;t.val=c; p[b].push_back(t); } build(1,1,n); for(ri i=1;i<=n;i++) { xiu(1,1,i,brr[i]-brr[i-1]); for(ri j=0;j<p[i].size();j++) { int l=p[i][j].l; int val=p[i][j].val; long long tmp=qu(l,i,1); xiu2(1,i,i,p[i].val-p[i].pos_real,p[i].val2-p[i].pos_real2); } } }
还没有码完, 究极折磨