MLE该怎么改???玄关*3
  • 板块题目总版
  • 楼主OIDragon
  • 当前回复9
  • 已保存回复11
  • 发布时间2024/4/27 15:42
  • 上次更新2024/4/27 15:59:40
查看原帖
MLE该怎么改???玄关*3
775893
OIDragon楼主2024/4/27 15:42

P6136MLE了,得了4040分

code:code:

#include <bits/stdc++.h>
using namespace std;
long long cnt = 2ll,a[4999999][2],s[4999999];
long long fun()
{
	a[cnt][0] = 0ll;
	a[cnt][1] = 0ll;
	s[cnt] = 0ll;
	return cnt++;
}
void ins(long long x,long long d)
{
	long long u = 1ll;			
	for(long long i = 30ll;i >= 0ll;i--)
	{
		long long v = (x >> i) & 1ll;
		if(a[u][v] == 0ll)
		{
			a[u][v] = fun();
		}			
		u = a[u][v];		
		s[u] += d;	
	}
}
long long cmp(long long k)
{
	long long u = 1ll,x = 0ll;
	for(long long i = 30ll;i >= 0ll;i--)
	{
		if(s[a[u][0]] >= k)
		{
			u = a[u][0]; 
		}
		else
		{
			x |= (1ll << i);
			k -= s[a[u][0]];
			u = a[u][1];
		}
	}
	return x;
}
long long nt(long long x)
{
	long long ans = 0ll,u = 1ll;
	for(long long i = 30ll;i >= 0ll;i--)
	{
		if((x >> i) & 1ll)
		{
			ans += s[a[u][0]];
			u = a[u][1];
		}
		else
		{
			u = a[u][0];
		}
		if(u == 0ll)
		{
			break;
		}
	}
	return ans;
}
void clear()
{
	a[1][0] = 0ll;
	a[1][1] = 0ll;
	cnt = 2ll;
}
long long pre(long long x)
{
	long long ans;
	ans = cmp(nt(x));
	return ans;
}
long long nx(long long x)
{
	long long ans;
	ans = cmp(nt(x + 1ll) + 1ll);
	return ans;
}
int main()
{
	long long n,q;
	scanf("%lld%lld",&n,&q);
	for(long long i = 1ll;i <= n;i++)
	{
		long long x;
		scanf("%lld",&x);
		ins(x + (long long)(1 << 30),1ll);
	}
	long long m = 0ll,ans = (long long)(-1);
	while(q--)
	{
		int f;
		long long t,num = (long long)(1 << 30),x;
		scanf("%d%lld",&f,&t);
		x = m ^ t;
		switch(f)
		{
			case 1:ins(x + num,1ll);break;
			case 2:ins(x + num,(long long)(-1));break;
			case 3:m = nt(x + num) + 1ll;if(ans == (long long)(-1)){ans = m;}else{ans ^= m;}break;
			case 4:m = cmp(x) - num;if(ans == (long long)(-1)){ans = m;}else{ans ^= m;}break;
			case 5:m = pre(x + num) - num;if(ans == (long long)(-1)){ans = m;}else{ans ^= m;}break;
			case 6:m = nx(x + num) - num;if(ans == (long long)(-1)){ans = m;}else{ans ^= m;}
		}
	}
	printf("%lld",ans);
	return 0;
}

实在是不明白哪里超限了,以及咋改???

求助大佬,速回复,thx

解答让我AC者,得33关!(不要给我AC代码)

2024/4/27 15:42
加载中...