MAXN=5给我爆个MLE?
  • 板块学术版
  • 楼主MessageBoxA
  • 当前回复10
  • 已保存回复10
  • 发布时间2023/3/24 09:47
  • 上次更新2023/10/23 20:43:36
查看原帖
MAXN=5给我爆个MLE?
77584
MessageBoxA楼主2023/3/24 09:47

P1856

本来MAXN应该是5005的,结果MLE,我为了验证把MAXN改成5怎么还是MLE,我这里也没用到动态的容器啊,这代码是怎么达到125Mb的

#include<bits/stdc++.h>
#define getmid int mid=(l+r)/2
#define lch (pos<<1)
#define rch (pos<<1|1)
const int MAXN=5;
using namespace std;
int n,cnt=0,num[MAXN<<3],tag[MAXN<<3],len[MAXN<<3],ans=0;
pair<bool,bool>iscvr[MAXN<<3];//iscover<l,r>
struct LINE{
    int l,r,y,inout;
}line[MAXN<<1];
bool cmp(LINE x,LINE y){
    return x.y<y.y;
}
inline void pushup(int pos,int l,int r){
    if(tag[pos]){
        iscvr[pos].first=iscvr[pos].second=1;
        len[pos]=r-l+1;
        num[pos]=1;
    }
    else if(l==r) len[pos]=num[pos]=iscvr[pos].first=iscvr[pos].second=0;
    else{
        iscvr[pos].first=iscvr[lch].first;
        iscvr[pos].second=iscvr[rch].second;
        len[pos]=len[lch]+len[rch];
        num[pos]=num[lch]+num[rch];
        if(iscvr[rch].first&&iscvr[lch].second) num[pos]-=1;
    }
}
void update(int pos,int l,int r,int ll,int rr,int val){
    if(r<ll || l>rr) return;
    if(ll<=l && r<=rr){
        tag[pos]+=val;
        pushup(pos,l,r);
        return;
    }
    getmid;
    if(ll<=mid) update(lch,l,mid,ll,rr,val);
    if(mid<rr) update(rch,mid+1,r,ll,rr,val);
    pushup(pos,l,r);
}
int main(){
    cin>>n;
    int minx=1e4,maxx=-1e4,lastlen=0;
    for(int i=1,xx1,xx2,yy1,yy2;i<=n;i++){
        cin>>xx1>>yy1>>xx2>>yy2;
        minx=min(minx,xx1);
        maxx=max(maxx,xx2);
        line[++cnt]={xx1,xx2,yy1,1};
        line[++cnt]={xx1,xx2,yy2,-1};
    }
    sort(line+1,line+1+cnt,cmp);
    line[0].y=0;
    for(int i=1;i<=cnt;i++){
        // if(line[i].l<line[i].r)
    	update(1,minx,maxx-1,line[i].l,line[i].r-1,line[i].inout);
        // cout<<num[1]<<' '<<line[i+1].y<<' '<<line[i].y<<endl;
    	ans+=num[1]*2*(line[i+1].y-line[i].y);
        // cout<<abs(len[1]-lastlen)<<endl;
    	ans+=abs(len[1]-lastlen);
    	lastlen=len[1];
    }
    cout<<ans<<endl;
    return 0;
}
2023/3/24 09:47
加载中...