求调!孩子快傻了!
  • 板块学术版
  • 楼主Gumbo
  • 当前回复6
  • 已保存回复6
  • 发布时间2021/10/14 21:33
  • 上次更新2023/11/4 03:48:14
查看原帖
求调!孩子快傻了!
478861
Gumbo楼主2021/10/14 21:33
#include<cstdio>
#include<cstdlib>
#define MAXN 505
using namespace std;
int D[MAXN];
int sz;
void push(int);
void upcheck(int);
void downcheck(int);
void sp(int&,int&);
void pop(void);
inline int read(void){
	register int ans=0;
	register char us=getchar();
	while(us<'0'||us>'9')us=getchar();
	while(us>='0'&&us<='9'){
		ans=(ans<<1)+(ans<<3)+(us^48);
		us=getchar();
	}
	return ans;
}
void qsort1(int,int);
int deadline[MAXN],value[MAXN];
int main(){
	int m,n;
	m=read();n=read();
	for(register int i=0;i<n;++i)deadline[i]=read();
	for(register int i=0;i<n;++i)value[i]=read();
	qsort1(0,n-1);
	int mx=0;
	int nw=0;
	for(register int i=n;i>=0;--i){
		while(nw<n&&deadline[nw]>i){
			push(nw);
			++nw;
		}
		mx+=value[D[1]];
		pop();
	}
	for(register int i=0;i<n;++i){
		mx-=value[i];
	}
	printf("%d",m+mx);
	return 0;
}
void qsort1(int L,int R){
	if(L>=R)return;
	int l=L,r=R;
	int mid=deadline[L+R>>1];
	while(l<r){
		while(l<=r&&deadline[l]>=mid)++l;
		while(l<=r&&deadline[r]<=mid)--r;
		if(l<r){
			sp(deadline[l],deadline[r]);
			sp(value[l],value[r]);
			++l;
			--r;
		}
	}
	qsort1(L,l);
	qsort1(r+1,R);
	return;
}

void push(int x){
	++sz;
	D[sz]=x;
	upcheck(sz);
	return;
}
void pop(void){
	sp(D[1],D[sz]);
	--sz;
	downcheck(1);
	return;
}
void sp(int&a,int&b){
	a^=b;b^=a;a^=b;
}
void upcheck(int x){
	if(x==1)return;
	if(value[D[x]]<value[D[x>>1]]){
		sp(D[x],D[x>>1]);
		upcheck(x>>1);
	}
	return;
}
void downcheck(int x){
	if(x<<1>sz)return;
	if(x<<1==sz){
		if(value[D[x]]<=value[D[x<<1]])return;
		sp(D[x],D[x<<1]);
		return;
	}
	else{
		if(value[D[x]]<=value[D[x<<1]]&&value[D[x]]<=value[D[(x<<1)+1]])return;
		if(value[D[x<<1]]<value[D[(x<<1)+1]]){
			sp(D[x],D[x<<1]);
			downcheck(x<<1);
		}
		else{
			sp(D[x],D[(x<<1)+1]);
			downcheck((x<<1)+1);
		}
	}
	return;
}
2021/10/14 21:33
加载中...