| 比赛 |
期末考试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;
}