Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
38055 | baka24 | 【BJ】T1 | C++ | 通过 | 100 | 411 MS | 215924 KB | 2981 | 2025-06-12 14:49:38 |
#include<bits/stdc++.h> using namespace std; #define lson t[pos].ls #define rson t[pos].rs int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=250010,N=34; int n,m,q,a[4][MAXN]; struct node{ int ls,rs,p[16],lzx[4],lzy[4]; bool lz[4]; }t[MAXN*N]; int rt[MAXN],cnt; void upd(int pos,int i,int x){ for(int s=0;s<1<<m;s++)if(s&(1<<i))t[pos].p[s]=t[pos].p[s^(1<<i)]+x; t[pos].lzx[i]=x; t[pos].lzy[i]=0; t[pos].lz[i]=1; } void upd2(int pos,int i,int x){ for(int s=0;s<1<<m;s++)if(s&(1<<i))t[pos].p[s]+=x; t[pos].lzy[i]+=x; } void pushdown(int pos,int tos){ lson=++cnt,rson=++cnt; t[lson]=t[t[tos].ls],t[rson]=t[t[tos].rs]; for(int i=0;i<m;i++){ if(t[pos].lz[i])upd(lson,i,t[pos].lzx[i]),upd(rson,i,t[pos].lzx[i]); upd2(lson,i,t[pos].lzy[i]),upd2(rson,i,t[pos].lzy[i]); t[pos].lz[i]=t[pos].lzx[i]=t[pos].lzy[i]=0; } } void pushup(int pos){ for(int i=0;i<1<<m;i++)t[pos].p[i]=min(t[lson].p[i],t[rson].p[i]); } void build(int &pos,int l,int r){ if(!pos)pos=++cnt; if(l==r){ for(int i=0;i<1<<m;i++) for(int j=0;j<m;j++)if(i&(1<<j))t[pos].p[i]+=a[j][l]; return; } int mid=(l+r)>>1; build(lson,l,mid),build(rson,mid+1,r); pushup(pos); } void update(int &pos,int tos,int l,int r,int ql,int qr,int i,int x,int y){ if(!pos)pos=++cnt,t[pos]=t[tos]; if(ql<=l&&qr>=r){ if(y){ if(x)return; upd2(pos,i,y); } else upd(pos,i,x); return; } int mid=(l+r)>>1; pushdown(pos,tos); if(ql<=mid)update(lson,t[tos].ls,l,mid,ql,qr,i,x,y); if(qr>mid)update(rson,t[tos].rs,mid+1,r,ql,qr,i,x,y); pushup(pos); } int query(int &pos,int tos,int l,int r,int ql,int qr){ if(!pos)pos=++cnt,t[pos]=t[tos]; if(ql<=l&&qr>=r)return t[pos].p[(1<<m)-1]; int mid=(l+r)>>1;pushdown(pos,tos); if(qr<=mid)return query(lson,t[tos].ls,l,mid,ql,qr); if(ql>mid)return query(rson,t[tos].rs,mid+1,r,ql,qr); return min(query(lson,t[tos].ls,l,mid,ql,qr),query(rson,t[tos].rs,mid+1,r,ql,qr)); } void slv(){ m=read(),n=read(),q=read(); for(int i=0;i<m;i++)for(int j=1;j<=n;j++)a[i][j]=read(); build(rt[0],1,n); for(int i=1;i<=q;i++){ int v=read(),op=read(); if(op==1){int o=read()-1,l=read(),r=read(),x=read(); if(x)update(rt[i],rt[v],1,n,l,r,o,0,x); else update(rt[i],rt[v],1,n,l,r,o,1,1); } if(op==2){int o=read()-1,l=read(),r=read(),x=read(); update(rt[i],rt[v],1,n,l,r,o,x,0); } if(op==3){int l=read(),r=read(); printf("%d\n",query(rt[i],rt[v],1,n,l,r)); } } } signed main(){ // freopen("matrix.in","r",stdin);freopen("matrix.out","w",stdout); slv(); return 0; }