关于vector的使用
查看原帖
关于vector的使用
1422979
Skywalker2187_2楼主2025/1/26 21:53

本题使用vector的代码:

#include <bits/stdc++.h>

#ifdef _WIN32
	#define getchar_unlocked getchar
	#define putchar_unlocked putchar
#else
	#define getchar getchar_unlocked
	#define putchar putchar_unlocked
#endif

// #define x first
// #define y second
#define set(arr,val) memset((arr),(val),sizeof(arr))
constexpr signed L=2*1e5+10; // L!=1e9+10

typedef long long LL;
// typedef unsigned long long ULL;
// typedef std::pair<signed,signed> PII;
// typedef std::priority_queue<signed,std::vector<signed>,std::greater<signed> > P_Q;
// typedef std::priority_queue<signed,std::vector<signed>,std::less<signed> > _P_Q;
// typedef __int128 INT

// constexpr signed L=;
// constexpr signed M=;
// #include <numbers> // only in C++20
constexpr signed inf=0x3f3f3f3f;
constexpr signed err=-1;
constexpr double eps=1e-8;
const double pi=acos(-1.0);
constexpr signed dx[]={0, 0, 1,-1, 1, 1,-1,-1};
constexpr signed dy[]={1,-1, 0, 0, 1,-1,-1, 1};
// constexpr LL mod=1e9+7;

using namespace std;

template<typename T>
void debug(string name="(NaN)",vector<T> v={-1})
{
	cout<<"\n***"<<name<<"***\n";
	for(typename vector<T>::const_iterator it=v.begin();it!=v.end();it++)
		cout<<*it<<' ';
	cout<<"\n****************\n";
}

inline LL read()
{
	signed f=1;
	LL x=0;
	char c=getchar_unlocked();

	while(c<'0'||c>'9')
	{
		if(c=='-')
			f=-1;
		c=getchar_unlocked();
	}
	
	while('0'<=c&&c<='9')
	{
		x=(x<<3)+(x<<1)+(c^48);
		c=getchar_unlocked();
	}

	return f*x;
}

inline void _write(LL x)
{
	if(x<0)
	{
		putchar_unlocked('-');
		x=-x;
	}
	if(x>9)
		_write(x/10);
	putchar_unlocked(x%10+'0');
	
	return;
}

inline void write(LL x,short op=0)// op>0:x+Space;op==0:x+endl;op<0:x.
{
	_write(x);
	if(op==0)
		putchar_unlocked('\n');
	else if(op>0)
		putchar_unlocked(' ');
	return;
}

inline void write_s(string dat)
{
	signed len=dat.size();
	for(signed i=0;i<len;i++)
		putchar_unlocked(dat[i]);
}

signed n,q;
vector<signed> num;

inline signed lowbit(signed x)
{
	return x&(-x);
}
struct BIT
{
	signed dat[L];

	inline void update(signed x,signed p)
	{
		for(;p<=n;p+=lowbit(p))
			dat[p]^=x;
	}
	inline signed xor_sum(signed p)
	{
		signed ans=0;
		for(;p;p-=lowbit(p))
			ans^=dat[p];
		return ans;
	}
} bit[2];

// #define CONSOLE_DEBUG
#define FILENAME "xor"
signed main()
{
	#ifndef ONLINE_JUDGE
		#ifndef CONSOLE_DEBUG
			freopen(FILENAME".in","r",stdin);
			freopen(FILENAME".out","w",stdout);
		#endif
	#endif

	n=read(),q=read();
	for(signed i=0;i<n;i++)
	{
		num.emplace_back(read());
		bit[i&1].update(num[i],i);
	}
	while(q--)
	{
		signed op=read(),p=read(),q=read();
		if(op==1)
		{
			bit[p&1].update(num[p]^q,p);
			num[p]=q;
		}
		else
		{
			if((p+q)&1)
				putchar('0'),putchar('\n');
			else
				write(bit[p&1].xor_sum(q)^bit[p&1].xor_sum(p-1));
		}
	}

	return 0;
}

结果TLE, 0pts0pts.

而将vector改为普通数组后, AC 100pts100pts.

求原因.

2025/1/26 21:53
加载中...