蒟蒻线段树MLE……
查看原帖
蒟蒻线段树MLE……
338786
mushroom_knight楼主2020/7/22 12:05

RT,应该是递归爆栈了……

没检查出来……

板子是过了P3372的……

#include<bits/stdc++.h>
#define lson(o) o<<1
#define rson(o) o<<1|1
using namespace std;

const int MAXN=1e7+5;
long long n,m,a[MAXN];
long long val[MAXN<<2],tag[MAXN<<2];

inline void push_up(long long o){
    val[o]=val[lson(o)]+val[rson(o)];
}
void build(long long o,long long l,long long r){
    tag[o]=0;
    if(l==r){
	   val[o]=l;//建值(different) 
	   return;
	}
	
    long long mid=(l+r)>>1;
    
	build(lson(o),l,mid);
    build(rson(o),mid+1,r);
    push_up(o);
} 
inline void give(long long o,long long l,long long r,long long k){
    tag[o]=tag[o]+k;
    val[o]=val[o]+k*(r-l+1);
}
inline void push_down(long long o,long long l,long long r){
	
    long long mid=(l+r)>>1;
    
	give(lson(o),l,mid,tag[o]);
    give(rson(o),mid+1,r,tag[o]);
    tag[o]=0;
}
long long query(long long o,long long l,long long r,long long ql,long long qr){
    
	long long res=0;
    
    if(ql<=l&&r<=qr){
    	return val[o];
	}
	
    long long mid=(l+r)>>1;
    
	push_down(o,l,r);
    if(ql<=mid){
    	res+=query(lson(o),l,mid,ql,qr);
	}
    if(qr>mid){
    	res+=query(rson(o),mid+1,r,ql,qr);
	}
    return res;
}

long long dfs(long long l,long long r,long long h){
	if(l>r){
		return 0;
	}
	
	long long mid=query(1,1,n,l,r);
	long long x__=a[mid]-h+dfs(l,mid-1,a[mid])+dfs(mid+1,r,a[mid]);
	long long y__=r-l+1;
	
	return min(x__,y__);
} 

int main(){
    cin>>n;
    for(register long long i=1;i<=n;++i){
    	cin>>a[i];
	}
	build(1,1,n);
	cout<<dfs(1,n,0);
    return 0;
}

dalao帮忙看看……(蒟蒻被教练拉回寝室了,等会再看看有木有大佬帮忙……)

2020/7/22 12:05
加载中...