B

题面描述:

给一个长度为n的序列,a[1], a[2], ... , a[n], 选出连续的k个数,使得这k个数的最大值加这k个数的or值最大。

假设选出的数为a[l], a[l + 1], ... , a[l + k -1],即求

max(a[l], a[l + 1], ... , a[l + k -1]) + (a[l] | a[l + 1] | ... | a[l + k -1])

对于所有的1 <= k <= n,输出答案

输入:

第一行输入一个n,第二行输入n个数,a[1], a[2], ... , a[n].

输出:

输出n行,每行一个整数。第i行表示k = i时的答案。

样例输入:

1 0 2

样例输出:

对于20%的数据,1 <= n <= 300

对于40%的数据,1 <= n <= 5000

对于100%的数据,1 <= n <= 200000, 0 <= a[i] < 2^16

【题解】

①注意到2^16了吗,有趣的地方就在这里了。

        ②结合|和+的定义我们可以知道,定义f[i]表示长度长度为i的序列的值最大,那么f[i]≥f[i-1];

        ③考虑求f[i],如果一个区间对我们的答案有贡献,那么区间的左右一定是最大值或能使异或值改变的值,而两边都是最大值的话去掉一个也无所谓,所以两边必定有一个能改变异或值的。

        ④可以做到了,枚举左右端点,然后维护其能改变其异或值的位置,最多16个,转移即可!

        (建议看代码)

 /*3
1 0 2
好想用linux啊~
其实代码很简单,但是思路很~~怎么说呢
精巧吧;
注意到|和+的单调 ,还有2^16这个数,很容易想到按位搞事情
其实自己是想到前半部分的,但是经验不够,不知道怎么运用,积累重要。
*/
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#include <ctime>
#include <cmath>
#define inf 0x3f3f3f3f
#define ll long long
#define N 200010
#define mem(f,a) memset(f,a,sizeof(f))
#define Run(i,l,r) for(int i=l;i<=r;i++)
#define Don(i,l,r) for(int i=l;i>=r;i--)
#define Eun(i,u,E) for(int i=head[u],v=E[i].v;i!=-1;i=E[i].next,v=E[i].v)
using namespace std;
int n,a[N],pre[N],num[N],s[N],top,ans[N];
void solve()
{ mem(pre,); mem(num,); top=;
Run(i,,n){
while (top&&a[s[top-]]<=a[i]) top--;
s[top++]=i;
Run(j,,){
if (a[i]&(<<j)) {
pre[j]=i;
num[i]=a[i];
}
else num[pre[j]]|=a[i];
}
Run(j,,)if (pre[j]){
int l=,r=top-;
while (l<r){
int mid=(l+r)/;
if (s[mid]>=pre[j]) r=mid;
else l=mid+;
}
int maxn=a[s[l]];
ans[i-pre[j]+]=max(ans[i-pre[j]+],maxn+num[pre[j]]);
}
}
}
int main()
{ freopen("B.in","r",stdin);
freopen("B.out","w",stdout);
scanf("%d",&n);
Run(i,,n){
scanf("%d",&a[i]);
}
solve();
Run(i,,n/) a[i]=a[n-i+];
solve();
Run(i,,n){
ans[i]=max(ans[i-],ans[i]);
printf("%d\n",ans[i]);
}
return ;
}//by tkys_Austin;

【17.12.22.B】的更多相关文章

  1. 【2017.12.22.A】

                                A 题面: 给一个n个点m条边的无向图,你可以选择一个点作为起点,然后沿着图中的边开始走,走的过程中,同一条边不能经过两次(相反的方向也不行). ...

  2. JAVA 基础编程练习题12 【程序 12 计算奖金】

    12 [程序 12 计算奖金] 题目:企业发放的奖金根据利润提成.利润(I)低于或等于 10 万元时,奖金可提 10%:利润高于 10 万元, 低于 20 万元时,低于 10 万元的部分按 10%提成 ...

  3. P2240 【深基12.例1】部分背包问题

    P2240 [深基12.例1]部分背包问题 题目描述 阿里巴巴走进了装满宝藏的藏宝洞.藏宝洞里面有 N(N \le 100)N(N≤100) 堆金币,第 ii 堆金币的总重量和总价值分别是 m_i,v ...

  4. 【6.12校内test】T2 子集

    这道题大概是这三道题里最简单的啦 但这阻止不了我废的脚步 [问题描述] 对于 n=4 时,对应的集合 s={4,3,2,1},他的非空子集有 15 个依次如下: {1} {2} {1,2} {3} { ...

  5. 【6.12校内test】T3 城市交通费

    要不我先去写T2吧(逃 先把题目搞上来: [问题描述] 有 n 个城市,编号 1~n.其中 i 号城市的繁华度为 pi.省内有 m 条可以双向同行的高速 公路,编号 1~m.编号为 j 的高速公路连接 ...

  6. 【c++习题】【17/5/22】重载数组下标操作符

    一.写出程序运行结果 1#include <iostream > using namespace std; int a[10]={1,2, 3, 4, 5, 6, 7, 8, 9, 10} ...

  7. 【01月22日】A股滚动市盈率PE最低排名

    深康佳A(SZ000016) - 滚动市盈率PE:1.55 - 滚动市净率PB:1.03 - 滚动年化股息收益率:4.71% - - - 深康佳A(SZ000016)的历史市盈率走势图 华菱钢铁(SZ ...

  8. 【6.12校内test】T1单词序列

    [问题描述] 给出两个单词(开始单词和结束单词)以及一个词典.找出从开始单词转换到结束单词, 所需要的最短转换序列.转换的规则如下: 1.每次只能改变一个字母 2.转换过程中出现的单词(除开始单词和结 ...

  9. 30天,App创业从0到1【7.12西安站】

    活动概况 时间:2015年07月12日13:30-16:30 地点:汇天使咖啡(高新路36号智空间二楼) 主办:APICloud.UPYUN.万紫网络 网址:www.apicloud.com 费用:免 ...

随机推荐

  1. CSS3新特性回顾

    CSS3 介绍 开始实例 新特征简介 强大的CSS选择器 抛弃图片的视觉效果 盒模型变化(多列布局和弹性盒模型) 阴影效果 Web字体和web Font 图标 CSS33过渡与动画交互效果 媒体查询 ...

  2. THUSC 2018 游记

    现在是闭幕式,我坐在西郊宾馆后排,开始写这篇游记. day0 早上从临汾坐火车到北京,12:52左右到了北京. 这次北京的地铁安检没有排成很长的队,但是在买票的时候我惊喜地发现我身上没有零钱--所幸北 ...

  3. Question | 关于Android安全的一二事

    本文来自网易云社区 "Question"为网易云易盾的问答栏目,将会解答和呈现安全领域大家常见的问题和困惑.如果你有什么疑惑,也欢迎通过邮件(zhangyong02@corp.ne ...

  4. hihoCoder 1175:拓扑排序二

    题目链接: http://hihocoder.com/problemset/problem/1175 题目难度:一星级(简单题) 今天闲来无事,决定刷一道水题.结果发现这道水题居然把我卡了将近一个钟头 ...

  5. jenkins手动安装插件

    插件下载地址: 搜索:https://plugins.jenkins.io/ 列表:https://updates.jenkins-ci.org/download/plugins/ 打开jenkins ...

  6. iOS URL加解密

    URL加解密 背景介绍 iOS 下URL加解密,项目使用AFNetworking 虽然是使用HTTPS,但是从安全方面考虑,在很多情况下还是需要对url的参数进行加密的. 接口如 https://19 ...

  7. Jmeter非GUI命令参数说明

    查看帮助 -h, --help print usage information and exit 查看版本 -v, --version print the version information an ...

  8. php处理三级分类数据

    <?php // 链接数据库 $link = mysqli_connect('localhost','root','root'); if($link == null){ exit; } mysq ...

  9. Pro Git - 笔记2

    Git Basics Getting a Git Repository Initializing a Repository in an Existing Directory For Linux: $ ...

  10. NOIP 2009 靶形数独(DLX)

    小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士拿出了他最近发明的“靶形数独”,作 ...