BZOJ 4415 [Shoi2013]发牌【线段树

裸的线段树的题,就像值域线段树一样记录一下size查询rank就好了……

喵的……为什么windows下跑得这么慢…………于是我对着AC的代码调了一上午……

极限数据本机三秒三,交上去0.4s……

惨啊……优化常数搞了一上午写了人生第一发读入输出优化2333


#include
#define MAXN 700023
//#define FLAZE_NAIVE
using namespace std;	int N,n;
int dt[MAXN<<3];

void build(int now,int l,int r){
	if(l==r)	return dt[now]=1,void();
	int mid=(l+r)>>1;
	build(now<<1,l,mid);
	build(now<<1|1,mid+1,r);
	dt[now]=r-l+1;
}

int inqry(int now,int l,int r,int rk){
#ifdef FLAZE_NAIVE
	printf("l = %d    r = %d     siz[ now ] = %d\n",l,r,dt[now]);
#endif
	if(l==r)	return dt[now]=0,l;
	int mid=(l+r)>>1;
	int rtn;
	if(rk<=dt[now<<1])	rtn=inqry(now<<1,l,mid,rk);
	else	rtn=inqry(now<<1|1,mid+1,r,rk-dt[now<<1]);
	--dt[now];
	return rtn;
}

char read_s[10];
int read_rtn,lth;
int read(){
	read_rtn=0;
	scanf("%s",read_s);
	lth=strlen(read_s);
	for(int i=0;i


你可能感兴趣的:(OI,BZOJ,线段树)