제출 #634361

#제출 시각아이디문제언어결과실행 시간메모리
634361smartmonkyXORanges (eJOI19_xoranges)C++14
100 / 100
511 ms11328 KiB
#include <iostream>
#include <algorithm>
#include <vector>
#include <math.h>
#include <set>
#include <map>
 
#define ll long long
#define ff first
#define ss second
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define int ll
using namespace std;
const int N=3e5;
ll t[2][N*4],a[N],n;
void build(int v=1,int tl=1,int tr=n){
	if(tl==tr){
	//	cout << (tl&1) <<" " <<v  <<" "<< a[tl]<<endl;
		t[(tl & 1)][v]=a[tl];
	}else{
		int mid=(tl+tr) >> 1;
		build(v*2,tl,mid);
		build(v*2+1,mid+1,tr);
	t[1][v]=(t[1][v*2]^t[1][v*2+1]);
	t[0][v]=(t[0][v*2]^t[0][v*2+1]);
	}
}
void upd(int pos,int val,int v=1, int tl=1,int tr=n){
	if(tl==tr){
		t[(tl & 1)][v]=val;
	}else{
		int mid=(tl+tr) >> 1;
		if(pos<=mid)
			upd(pos,val,v*2,tl,mid);
		else
			upd(pos,val,v*2+1,mid+1,tr);
	t[1][v]=(t[1][v*2]^t[1][v*2+1]);
	t[0][v]=(t[0][v*2]^t[0][v*2+1]);
	}
}
int get(int l,int r,int v=1,int tl=1,int tr=n){
	 if (l > tr || tl > r)
		return 0;
	if (l <= tl && tr <= r)
		return t[(l & 1)][v];
	int mid=(tl+tr) >> 1;
	return get(l,r,v*2,tl,mid)^get(l,r,v*2+1,mid+1,tr);
}
main(){
    int q;
    cin >> n>>q;
    for(int i=1;i<=n;i++)
		cin >>a[i];
	build();

	while(q--){
		int type,x,y;
		cin >>type >>x >>y;
		if(type==1)
			upd(x,y);
		else{
			if((y-x+1)%2==0)
				cout<<0<<endl;
			else
				cout <<get(x,y)<<endl;
		}
	}
}

컴파일 시 표준 에러 (stderr) 메시지

xoranges.cpp:50:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   50 | main(){
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...