【bzoj4245】[ONTAK2015]OR-XOR
2016-06-21 21:50
323 查看
利用前缀和选m个区间等价于选m个数
从最高位开始找,如果这一位至少有m个0,则可以为0,该位为1的后面就不可以选了。
还要注意,最后一个数如果该位为1,那么这一位必须为1,然后要从62开始枚举,而不是从31
从最高位开始找,如果这一位至少有m个0,则可以为0,该位为1的后面就不可以选了。
还要注意,最后一个数如果该位为1,那么这一位必须为1,然后要从62开始枚举,而不是从31
#include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> using namespace std; typedef long long LL; #define N 500010 int n,m; int cnt; LL ans; LL a ; bool v ; int main() { scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) scanf("%lld",&a[i]),a[i]^=a[i-1]; for (int i=62;i>=0;i--) { cnt=0; for (int j=1;j<=n;j++) if (!v[j] && !(a[j]&(1LL<<(LL)i))) ++cnt; if (cnt<m || (a & (1LL<<(LL)i))) ans+=(1LL<<(LL)i); else for (int j=1;j<=n;j++) if (!v[j] && (a[j] & (1LL<<(LL)i))) v[j]=1; } printf("%lld",ans); return 0; }
相关文章推荐
- 第十五周项目:阅读程序2
- 3dB带宽和超宽带
- 正则表达式总结
- 【设计模式】访问者模式
- 【网络编程5】Java与Python套接字Socket通信的例子
- Servlet知识点总结
- 3.文件读写细节及文件管理
- sql server 2012 自定义聚合函数(MAX_O3_8HOUR_ND) 计算最大的臭氧8小时滑动平均值
- Java 中基本类型和字符串之间的转换
- tsurf
- 计算机博弈大赛参赛程序算法总结
- postgresql----继承表INHERITS PARENT TABLE
- 构建之法05
- struts2框架 初始别
- Corosync+pacemaker
- Android listview的一般写法
- python overview
- java 成神之路 (四)
- 虚拟机下使用minicom的设置
- UVa 247 Calling Circles (DFS+Floyd)