Language: C

#include <stdio.h>
#include <string.h>
#include <queue>
#include <math.h>
#include <vector>
#include <iostream>
#include <algorithm>
#include <time.h>
#include <map>
#include <string>
#include <set>
using namespace std;
#define ll int
#define cons(x,y) x##e##y
#define sqr(x) (x)*(x)
const double eps=1e-8;
const double pi=acos(-1.0);
int sig(double x){return x<-eps?-1:x>eps;}
const int N=cons(1,6)+100;
const int inf=0x3f3f3f3f;
int r,c,m;
int mi[N<<2],ma[N<<2],sum[N<<2],add[N<<2],f[N<<2];
void pushup(int rt)
{
    mi[rt]=min(mi[rt<<1],mi[rt<<1|1]);
    ma[rt]=max(ma[rt<<1],ma[rt<<1|1]);
    sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void pushdown(int rt,int m)
{
//    if(~f[rt])
//    {
//        mi[rt<<1]=f[rt];mi[rt<<1|1]=f[rt];
//        ma[rt<<1]=f[rt];ma[rt<<1|1]=f[rt];
//        sum[rt<<1]=f[rt]*(m-m>>1);
//        sum[rt<<1|1]=add[rt]*(m>>1);
//        add[rt]=f[rt<<1|1]=f[rt<<1]=f[rt];
//        f[rt]=-1;
//    }

    if (add[rt])
    {
        mi[rt<<1]+=add[rt];mi[rt<<1|1]+=add[rt];
        ma[rt<<1]+=add[rt];ma[rt<<1|1]+=add[rt];
        sum[rt<<1]+=add[rt]*(m-m>>1);
        sum[rt<<1|1]+=add[rt]*(m>>1);
        add[rt]=0;
    }
}

void build(int l,int r,int rt)
{
    add[rt]=0;f[rt]=-1;
    if(l==r)
    {
        mi[rt]=ma[rt]=sum[rt]=0;
        return;
    }
    int m=(l+r)>>1;
    build(l,m,rt<<1);
    build(m+1,r,rt<<1|1);
    pushup(rt);
}

void update(ll L,ll R,ll c,ll l,ll r,ll rt)
{
    if( L<=l && r<=R )
    {
        add[rt]+=c;
        mi[rt]+=c;ma[rt]+=c;
        sum[rt]+=c*(r-l+1);
        return;
    }
    pushdown(rt,r-l+1);
    ll m=(l+r)/2;
    if(L<=m) update(L,R,c,l,m,rt<<1);
    if(R>m) update(L,R,c,m+1,r,rt<<1|1);
    pushup(rt);
}
void sett(ll L,ll R,ll c,ll l,ll r,ll rt)
{
    if( L<=l && r<=R )
    {
        add[rt]=0;f[rt]=c;
        mi[rt]=c;ma[rt]=c;
        sum[rt]=c*(r-l+1);
        return;
    }
    pushdown(rt,r-l+1);
    ll m=(l+r)/2;
    if(L<=m) sett(L,R,c,l,m,rt<<1);
    if(R>m) sett(L,R,c,m+1,r,rt<<1|1);
    pushup(rt);
}
struct nd
{
    int s,ma,mi;
};
nd query(int L,int R,int l,int r,int rt)
{
    nd ret={0,0,inf};
    if(L<=l&&r<=R)
    {
        return ret={sum[rt],ma[rt],mi[rt]};
    }
    int m=(l+r)>>1;
    pushdown(rt,r-l+1);
    if(L<=m)
    {
        nd pp=query(L,R,l,m,rt<<1);
        ret.s+=pp.s;
        ret.ma=max(ret.ma,pp.ma);
        ret.mi=min(ret.mi,pp.mi);
    }
    if(R>m)
    {
        nd qq=query(L,R,m+1,r,rt<<1|1);
        ret.s+=qq.s;
        ret.ma=max(ret.ma,qq.ma);
        ret.mi=min(ret.mi,qq.mi);
    }
    return ret;
}
void solve(int T,int op)
{
    if(op)swap(r,c);
    int x[2],y[2],v,k;
    int num=r*c-1;
    build(0,num,1);
    while(T--)
    {
        scanf("%d",&k);
        scanf("%d%d%d%d",&x[op],&x[1^op],&y[op],&y[1^op]);
        x[0]--;x[1]--;y[0]--;y[1]--;
        if (k==1)
        {
            scanf("%d",&v);
            for(int i=x[0];i<=y[0];++i)
            {
                update(i*c+x[1],i*c+y[1],v,0,num,1);
            }
        }
        else if(k==2)
        {
            scanf("%d",&v);
            for(int i=x[0];i<=y[0];++i)
            {
                sett(i*c+x[1],i*c+y[1],v,0,num,1);
            }
        }
        else
        {
            int su=0,m1=0,m2=inf;
            for(int i=x[0];i<=y[0];++i)
            {
                nd pp=query(i*c+x[1],i*c+y[1],0,num,1);
                su+=pp.s;
                m1=max(m1,pp.ma);
                m2=min(m2,pp.mi);
            }
            printf("%d %d %d\n",su,m2,m1);
        }
    }

}

int main(int argc, char *argv[])
{
    freopen("in.txt","r",stdin);
    while(~scanf("%d%d%d",&r,&c,&m))
    {
        if(r<=c)solve(m,0);
        else solve(m,1);
    }
    return 0;
}

Compiler output:
main.c:3:10: fatal error: queue: No such file or directory
    3 | #include <queue>
      |          ^~~~~~~
compilation terminated.