什么????全输出0,快来踩爆我!!!!!(bushi)
查看原帖
什么????全输出0,快来踩爆我!!!!!(bushi)
895690
gghack_Nythix楼主2023/1/26 13:08

谁能看看我哪里错了?

#include <bits/stdc++.h>
#define lid id << 1
#define rid id << 1 | 1
#define int long long
using namespace std;
int n,m;
struct srg{
    int l,r;
    int minn,maxx;
}tr[1000005 * 5];
void pushdown(int id){
    tr[lid].maxx = max(tr[lid].maxx,tr[id].maxx);
    tr[lid].maxx = min(tr[lid].maxx,tr[id].minn);
    tr[lid].minn = min(tr[lid].minn,tr[id].minn);
    tr[lid].minn = max(tr[lid].minn,tr[id].minn);
    //fengge
    tr[rid].maxx = max(tr[rid].maxx,tr[id].maxx);
    tr[rid].maxx = min(tr[rid].maxx,tr[id].minn);
    tr[rid].minn = min(tr[rid].minn,tr[id].minn);
    tr[rid].minn = max(tr[rid].minn,tr[id].minn);
    tr[id].maxx = 0,tr[id].minn = 1000005;
}
void build_tr(int id,int l,int r){
    tr[id].l = l,tr[id].r = r,tr[id].maxx = 0,tr[id].minn = 1000005;
    if(l == r){
        return ;
    }
    int mid = (l + r)>>1;
    build_tr(lid,l,mid);
    build_tr(rid,mid + 1,r);
    pushdown(id);
}
void upp1(int id,int l,int r,int k)
{
    if(tr[id].l == l && tr[id].r == r)
    {
        tr[id].maxx = max(tr[id].maxx,k);
        tr[id].minn = max(tr[id].minn,k);
        return ;
    }
    pushdown(id);
    int mid = (tr[id].l + tr[id].r) >> 1;//中点
    if(r <= mid)
    {
        upp1(lid,l,r,k);
    }  
    if(l > mid){
        upp1(rid,l,r,k);
    } 
    //upp1(lid,l,mid,k),upp1(rid,mid + 1,r,k);
}
void upp2(int id,int l,int r,int k)
{
    if(tr[id].l == l && tr[id].r == r){
        tr[id].maxx = min(tr[id].maxx,k);
        tr[id].minn = min(tr[id].minn,k);
        return ;
    }
    pushdown(id);
    int mid = (tr[id].l + tr[id].r) >> 1;//中点
    if(r <= mid){
        upp2(lid,l,r,k);
    }  
    if(l > mid){
        upp2(rid,l,r,k);
    } 
    //upp2(lid,l,mid,k),upp2(rid,mid + 1,r,k);
}
void qur(int id,int l,int r){
    if(tr[id].l == tr[id].r){
        if(tr[id].l <= n){
            cout << tr[id].maxx << endl;
            return ;
        }
    }
    int mid = (l + r) >> 1;
    pushdown(id);
    qur(lid,l,mid),qur(rid,mid + 1,r);
}
signed main()
{
    cin >> n >> m;
    build_tr(1,1,n);
    for(int i = 1;i <= m;++i){
        int t,L,R,H;
        cin >> t >> L >> R >> H;
        if(t == 1){
            upp1(1,L,R,H);
        }
        if(t==2){
            upp2(1,L,R,H);
        }
    }
    qur(1,1,n);
    return 0;
}
2023/1/26 13:08
加载中...