BZOJ:5092 [Lydsy1711月赛]分割序列(贪心&高维前缀和)
Description
Input
Output
包含n行,每行一个整数,即a每个前缀的能量值。
Sample Input
1 2 3 4 5
Sample Output
3
6
10
9
题意:对数组的异或前缀和a[i],对于每个i,求最大a[j]+a[j]^a[i];
思路:从高位到第位贪心(20->0),如果第i位为1,显然无论选0或者1够有一样的贡献。如果为0,我们优先选1;这次选了1后,后面选的应该包括这个1,即之前选的1的集合的超集。 我们用高维前缀和来求每个数的超集的最小位置。如果最小位置小于等于i,说明这意味可以选1。
(这个公式还可以求最小位置ORZ。
(总觉得再CF做过类似的题,而且当时没做来
#include<bits/stdc++.h>
using namespace std;
const int maxn=<<;
int a[maxn],f[maxn];
int main()
{
memset(f,,sizeof(f));
int N; scanf("%d",&N);
for(int i=;i<=N;i++){
scanf("%d",&a[i]);
a[i]^=a[i-];
f[a[i]]=min(f[a[i]],i);
}
for(int i=;i<;i++){
for(int j=;j<(<<);j++)
if(!(j&(<<i))) f[j]=min(f[j],f[j|(<<i)]);
}
for(int i=;i<=N;i++){
int ans=,now=;
for(int j=;j>=;j--){
if((a[i]>>j)&) ans+=(<<j);
else if(f[now|(<<j)]<=i) ans+=(<<j)*,now|=(<<j);
}
printf("%d\n",ans);
}
return ;
}
BZOJ:5092 [Lydsy1711月赛]分割序列(贪心&高维前缀和)的更多相关文章
- bzoj 5092 [Lydsy1711月赛]分割序列 贪心高维前缀和
[Lydsy1711月赛]分割序列 Time Limit: 5 Sec Memory Limit: 256 MBSubmit: 213 Solved: 97[Submit][Status][Dis ...
- BZOJ5092:[Lydsy1711月赛]分割序列(贪心,高维前缀和)
Description 对于一个长度为n的非负整数序列b_1,b_2,...,b_n,定义这个序列的能量为:f(b)=max{i=0,1,...,n}((b_1 xor b_2 xor...xor b ...
- bzoj 5092: [Lydsy1711月赛]分割序列
5092: [Lydsy1711月赛]分割序列 Time Limit: 5 Sec Memory Limit: 256 MBSubmit: 219 Solved: 100[Submit][Stat ...
- BZOJ.5092.[Lydsy1711月赛]分割序列(高维前缀和)
题目链接 \(Description\) \(Solution\) 首先处理\(a_i\)的前缀异或和\(s_i\).那么在对于序列\(a_1,...,a_n\),在\(i\)位置处分开的价值为:\( ...
- bzoj 5092 [Lydsy1711月赛]分割序列——高维前缀和
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5092 套路地弄一个前缀异或和,就变成 f[ i ]=max_{j=0}^{i} { s[ j ...
- 【BZOJ5092】分割序列(高维前缀和)
题意:对于一个长度为n的非负整数序列b_1,b_2,...,b_n, 定义这个序列的能量为:f(b)=max{i=0,1,...,n}((b_1 xor b_2 xor...xor b_i)+(b_{ ...
- bzoj 5094 [Lydsy1711月赛]硬盘检测 概率dp
[Lydsy1711月赛]硬盘检测 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 273 Solved: 75[Submit][Status][Dis ...
- bzoj 5093 [Lydsy1711月赛]图的价值 NTT+第二类斯特林数
[Lydsy1711月赛]图的价值 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 245 Solved: 128[Submit][Status][D ...
- bzoj 4922: [Lydsy1706月赛]Karp-de-Chant Number 贪心+dp
题意:给定 $n$ 个括号序,让你从中选取一些括号序按照任意顺序拼接,最终生成一个合法的括号序列,求这个合法序列长度最大值. 题解:假设括号序列相对顺序固定,而我们要做的只是判断选还是不选的话可以转化 ...
随机推荐
- DBUS及常用接口介绍
[原文] 1. 概述 1.1 DBUS概述 DBUS是一种高级的进程间通信机制.DBUS支持进程间一对一和多对多的对等通信,在多对多的通讯时,需要后台进程的角色去分转消息,当一个进程发消息 ...
- 如何更改nagios监控默认的检查时间
/usr/local/nagios/etc/nagios.cfg: interval_length 表示时间单位,默认为60,即1分钟 /usr/local/nagios/etc/objects/se ...
- SPSS t 检验
在针对连续变量的统计推断方法中,最常用的是 t 检验和方差分析两种. t 检验,又称 student t 检验,主要用于样本含量较小(例如n<30),总体标准差未知的正态分布资料.它是用 t 分 ...
- Ubuntu16.04 安装openssl
1 下载 https://www.openssl.org/source/ 2 解压 3 安装 # ./config --prefix=/usr/local --openssldir=/usr/loca ...
- 二十 Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器
编写spiders爬虫文件循环抓取内容 Request()方法,将指定的url地址添加到下载器下载页面,两个必须参数, 参数: url='url' callback=页面处理函数 使用时需要yield ...
- jquery动态创建元素 div元素随垂直滚动条位置变化置顶显示
刚打开页面效果 拖动滑动条之后效果 页面代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...
- 转载:【Oracle 集群】RAC知识图文详细教程(七)--Oracle 11G RAC集群安装
文章导航 集群概念介绍(一) ORACLE集群概念和原理(二) RAC 工作原理和相关组件(三) 缓存融合技术(四) RAC 特殊问题和实战经验(五) ORACLE 11 G版本2 RAC在LINUX ...
- MD5加密(java和c#)
java代码 public static String md5(String str) { try { MessageDigest md = MessageDigest.getInstance(&qu ...
- log4cpp
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- XML方式实现Spring的AOP
1.编写切面类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 package com.fz.an ...