传送门

考试的时候卡了一会儿。

显然这个答案只跟二进制位为1的数量有关。

还有一个显然的结论。

对于一个区间[l,r][l,r][l,r],如果其中单个数二进制位为1的数量最大值不到区间所有数二进制位为1的数量之和的一半即maxn∗2≤summaxn*2\le summaxn∗2≤sum,并且sum是偶数那么这个区间是好的。

继续考虑,如果我们枚举左端点l和右端点r,那么当sum[r0]−sum[l−1]≥64sum[r_0]-sum[l-1]\ge 64sum[r0​]−sum[l−1]≥64之后,如果保持lll不变,r0≤r≤nr_0\le r\le nr0​≤r≤n时的答案可以直接通过前缀和预处理求出。

这样总时间复杂度是O(n∗64)O(n*64)O(n∗64)

代码:

#include<bits/stdc++.h>
#define N 300005
#define ll long long
using namespace std;
inline ll read(){
	ll ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
int n;
ll a[N],sum[N],sum1[N],sum2[N],ans=0;
inline ll lowbit(ll x){return x&-x;}
inline int calc(ll x){
	int ret=0;
	while(x)x-=lowbit(x),++ret;
	return ret;
}
int main(){
	n=read(),sum2[0]=1;
	for(int i=1;i<=n;++i)sum[i]=sum[i-1]+(a[i]=calc(read()));
	for(int i=1;i<=n;++i)sum1[i]=sum1[i-1]+(sum[i]&1);
	for(int i=1;i<=n;++i)sum2[i]=sum2[i-1]+((sum[i]&1)^1);
	for(int r=1;r<=n;++r){
		ll maxn=a[r];
		int low=max(1,r-64);
		for(int l=r;l>=low;--l){
			maxn=max(maxn,a[l]);
			if((maxn<<1)<=(sum[r]-sum[l-1])&&(sum[r]&1)==(sum[l-1]&1))++ans;
		}
		if(low==1)continue;
		ans+=sum[r]&1?sum1[low-2]:sum2[low-2];
	}
	cout<<ans;
	return 0;
}

最新文章

  1. HTML自定义对象与属性(谷歌,火狐,IE9浏览器没问题)
  2. MATLAB的GUI
  3. js中文乱码怎么解决【转】
  4. hduoj 4706 Herding 2013 ACM/ICPC Asia Regional Online —— Warmup
  5. html5in24hours
  6. WebService简单介绍
  7. POJ 1961 Period KMP算法next数组的应用
  8. hdu 1466 计算直线的交点数
  9. css3投影讲解、投影
  10. python成长之路——第四天
  11. NhibernateProfiler-写个自动破解工具(源码)
  12. inet_aton()
  13. 生产环境中学习Redis
  14. Spring框架浅析
  15. 前端 ------ 03 body标签中的相关标签
  16. seo:与优化相关的熊掌号
  17. js正则表达式只能是数字、字母或下划线
  18. $(...).modal is not a function
  19. how webpack Hot Module Replacement works
  20. ios开发UI篇--UIStepper

热门文章

  1. C# 生成word文档(NPOI)
  2. OpenCV版本下载
  3. 使用plsql进行查询的时候出现错误:动态执行表不可访问,本会话的自动统计被终止
  4. cobbler全自动批量安装部署linux
  5. eclipse添加源码的另外一种方法
  6. jstl fmt
  7. 正则表达式在JS中的使用
  8. dubbo 多协议和多注册中心
  9. testng + Ignore 忽略测试方法
  10. 103041000997维护的是周批,按周合并后再考虑最小采购批量、舍入值、然后回写到SAP系统