比赛 期末考试4 评测结果 WWWWWWWWWWWWWWWWWEEEEEEEE
题目名称 硬币游戏 最终得分 0
用户昵称 2_16鸡扒拌面 运行时间 5.578 s
代码语言 C++ 内存使用 12.44 MiB
提交时间 2026-02-12 10:20:52
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

const int N=200010,M=21;
int n,q,k,a[N],st[M][N],lg[N],s[N],lst;
inline int qmax(int l,int r){
	int g=lg[r-l+1];
	return max(st[g][l],st[g][r-(1<<g)+1]);
}

int main(){
    freopen("coin.in","r",stdin);
    freopen("coin.out","w",stdout);
	cin>>n>>q>>k;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++){
		s[i]=s[i-1]+(a[i]!=0);
		st[0][i]=a[i];
	}
	for(int i=2;i<=n;i++)lg[i]=lg[i>>1]+1;
	for(int i=1;i<M;i++)
		for(int j=1;j+(1<<i)-1<=n;j++)
			st[i][j]=max(st[i-1][j],st[i-1][j+(1<<(i-1))]);
	while(q--){
		int l,r;
		cin>>l>>r;
		if(k==2)l^=lst,r^=lst;
		if(l>r)swap(l,r);
		int ans=qmax(l,r)+s[r]-s[l-1];
		cout<<ans<<endl;
		lst=ans;
	}
	return 0;
}