打卡信奥刷题(3086)用C++实现信奥题 P7096 [yLOI2020] 泸沽寻梦
P7096 [yLOI2020] 泸沽寻梦题目背景我应是泸沽烟水里的过客孑然弹铗划天地开阖。邂逅过的梦醒之余却忘了该如何洒脱。——银临《泸沽寻梦》题目描述南有仙地名曰摩梭摩梭有湖泸沽是也。茶茶在泸沽湖中寻找自己的梦。氤氲雾气中茶茶的nnn个梦排成了一个序列。茶茶的所有梦境都是拉瓦的样子。为了区分这些拉瓦茶茶规定从左到右第iii个的拉瓦的美颜值是一个非负整数aia_iai。面对着这些梦茶茶会进行mmm次操作每次操作会给定两个数字p,xp,xp,x然后将apa_pap和ap1a_{p1}ap1都对xxx做按位异或。每次操作完之后茶茶都想知道当前的梦序列中有多少个子区间[l,r][l,r][l,r]满足l≤rl \le rl≤r且区间的异或和为000请你回答茶茶的问题。区间[l,r][l,r][l,r]的异或和定义为al⊗al1⊗…ar−1⊗ara_l \otimes a_{l 1} \otimes \dots a_{r - 1} \otimes a_ral⊗al1⊗…ar−1⊗ar。其中⊗\otimes⊗代表二进制按位异或运算即 C 语言的「^」运算符。两个区间不同当且仅当两区间左端点不同或两区间右端点不同或两区间左右端点均不同。为了避免输出过大你只需要输出四个整数分别表示你所有回答的按位异或之和、你共有多少次回答的答案是奇数你的所有答案中的最大值、你的所有答案中的最小值。输入格式第一行有两个整数分别表示梦境的数量nnn和操作的次数mmm。第二行有nnn个用空格隔开的整数第iii个整数表示第iii个拉瓦的美颜值aia_iai。接下来mmm行每行两个整数依次表示一次操作的ppp和xxx。输出格式输出四行每行一个整数依次表示你所有回答的按位异或之和、你共有多少次回答的答案是奇数你的所有答案中的最大值、你的所有答案中的最小值。输入输出样例 #1输入 #15 3 1 2 3 4 5 1 3 2 3 3 3输出 #13 3 3 1说明/提示样例 1 解释第一次操作后序列变为2,1,3,4,5{2,1,3,4,5}2,1,3,4,5有且仅有区间[1,3][1,3][1,3]的异或和为000故本次询问的答案为111。第二次操作后序列变为2,2,0,4,5{2,2,0,4,5}2,2,0,4,5区间[1,2][1,2][1,2]、[1,3][1,3][1,3]、[3,3][3,3][3,3]的异或和为000故本次询问的答案为333。第三次操作后序列变为2,2,3,7,5{2,2,3,7,5}2,2,3,7,5有且仅有区间[1,2][1,2][1,2]的异或和为000故本次询问的答案为111。所有答案的异或和为333有333次回答的答案为奇数所有答案中的最大值为333最小值为111。数据规模与约定本题采用多测试点捆绑测试共有 5 个子任务。子任务111101010分保证n,m≤100n,m \le 100n,m≤100。子任务222101010分保证n,m≤300n,m \le 300n,m≤300。子任务333202020分保证n,m≤3000n,m \le 3000n,m≤3000。子任务444303030分保证n,m≤105n,m \le 10^5n,m≤105。子任务555303030分无特殊限制。对于前四个子任务保证ai,x≤na_i,x \le nai,x≤n对于全部的测试点保证1≤n,m≤1061 \le n,m \le 10^61≤n,m≤1060≤ai,x≤1090 \le a_i,x \le 10^90≤ai,x≤1091≤pn1 \le pn1≤pn。提示请注意ai,x≤Ya_i,x \leq Yai,x≤Y不能说明ai⊗x≤Ya_i \otimes x \leq Yai⊗x≤Y。请注意大量数据读入对程序效率造成的影响。本题的特殊输出方式只是为了避免输出过大造成程序超时与本题解法无关。请注意常数因子对程序效率造成的影响。本题共有两个样例文件请见附加文件中的 dream.zip。C实现#includebits/stdc.h#defineintlonglongusingnamespacestd;unordered_mapint,intmp;intpre[1000001];inlineintread(){intx0;charcgetchar();while(c0||c9)cgetchar();while(c0c9)xx*10c-0,cgetchar();returnx;}signedmain(){intn,m;cinnm;intans0;mp[0]1;intans10,ans20,ans30,ans40x7fffffffffffffff;for(inti1;in;i){intx;xread();pre[i]pre[i-1]^x;ansmp[pre[i]];//更新初始答案mp[pre[i]];}for(inti1;im;i){intp,x;pread();xread();mp[pre[p]]--;ans-mp[pre[p]];//减去影响pre[p]^x;ansmp[pre[p]];//加上贡献mp[pre[p]];ans1^ans;//统计答案if(ans1)ans2;ans3max(ans3,ans);ans4min(ans4,ans);}coutans1endlans2endlans3endlans4endl;return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2499952.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!