过了样例但0pts求助
查看原帖
过了样例但0pts求助
220824
yyz1005楼主2022/6/1 13:40

Sub1,2,3 WA

Sub4,5 RE

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll evm = 0,odm = 0,n,q;
ll Eveb[100010],Oddb[100010];
ll Evt[100010],Odt[100010];
#define lowbit(x) (x&-x)
void Eveadd(ll id,ll x){
	while(id<=evm){
		Evt[id] = Evt[id]^Eveb[id]^x;
		id+=lowbit(id);
	}
	Eveb[id] = x;
}
void Oddadd(ll id,ll x){
	while(id<=odm){
		Odt[id] = Odt[id]^Oddb[id]^x;
		id+=lowbit(id);
	}
	Oddb[id] = x;
}
ll Evesum(ll id){
	int res = 0;
	while(id>=0){
		res^=Evt[id];
		id-=lowbit(id);
	}
	return res;
}
ll Oddsum(ll id){
	int res = 0;
	while(id>=0){
		res^=Odt[id];
		id-=lowbit(id);
	}
	return res;
}
int main(){
	freopen("huBoy.txt","r",stdin);
	freopen("resul.cpp","w",stdout);
	scanf("%lld%lld",&n,&q);
	for(ll i = 1; i <= n; i++){
		ll x;
		scanf("%lld",&x);
		if(i&1){
			odm++;
			Oddadd(odm,x);
		} else {
			evm++;
			Eveadd(evm,x);
		}
	}
	while(q--){
		ll l,r,op;
		scanf("%lld%lld%lld",&op,&l,&r);
		if(op==2){
			if((l&1)^(r&1)) puts("0");
			else if(l&1){
				printf("%lld\n",Odt[(r+1)/2]^Odt[(l-1)/2]);
			} else {
				printf("%lld\n",Evt[r/2]^Evt[(l-1)/2]);
			}
		} else {
			if(l&1) Oddadd((l+1)/2,r);
			else Eveadd(l/2,r);
		}
	}
	return 0;
}
2022/6/1 13:40
加载中...