NEU 1252 (拆位)
2015-11-18 16:50
267 查看
题目很水意思是求区间内的与和。
很容易想到用在线线段树或者RMQ或者离线树状数组搞,但是我偏偏不用这些数据结构。
可以把每个数拆位求每一位的前缀和,如果这一位的区间的和刚好等于区间长度那么与和的结果这一位就是1,否则这一位就是0.
很容易想到用在线线段树或者RMQ或者离线树状数组搞,但是我偏偏不用这些数据结构。
可以把每个数拆位求每一位的前缀和,如果这一位的区间的和刚好等于区间长度那么与和的结果这一位就是1,否则这一位就是0.
#include <bits/stdc++.h> using namespace std; #define maxn 111111 int sum[maxn][66]; //1到i的二进制数的第j位的和 int n, m, l, r; long long a[maxn]; void solve (int l, int r) { long long ans = 0; for (long long i = 1, num = 1; i < 63; i++, num <<= 1) { if (sum[r][i]-sum[l-1][i] == r-l+1) { ans += num; } } printf ("%lld\n", ans); } int main () { while (scanf ("%d%d", &n, &m) == 2) { memset (sum, 0, sizeof sum); for (int i = 1; i <= n; i++) { scanf ("%lld", &a[i]); for (long long bit = 1, num = 1; bit < 63; bit++, num <<= 1) { sum[i][bit] = sum[i-1][bit] + ((a[i]&num)>0); } } while (m--) { scanf ("%d%d", &l, &r); solve (l, r); } printf ("\n"); } return 0; }
相关文章推荐
- asp.net escape和unescape区别 UrlEncode和UrlDecode区别
- 如何自定义CollectionView中每个元素的大小和间距
- mysql
- 数据预处理:PCA,SVD,whitening,normalization
- android adb
- easyui只选择年份月份的插件---SimpleCanleder
- Linux下MongoDB安装及使用
- iOS中的observer(观察者设计模式)swift版
- Android:Calling startActivity() from outside of an Activity 错误
- freescale imx6 products
- 在一串字符中匹配出4个连续的数字
- java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to java.sql.Connection异常问题解决
- oracle 11g 完全卸载
- PostgreSQL 性能测试工具
- Android Studio模块化编程实践之aar
- Linux内核4级页表的演进
- impala keepalived+haproxy
- java.lang.ClassNotFoundException: javax.persistence.Cacheable
- Python学习指南
- 【179】IDL 读写 NetCDF 文件