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时的答案。

样例输入:

3

1 0 2

样例输出:

4

4

5

对于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个,转移即可!

        (建议看代码)

 1 /*3
 2 1 0 2
 3 好想用linux啊~
 4 其实代码很简单,但是思路很~~怎么说呢
 5 精巧吧;
 6 注意到|和+的单调 ,还有2^16这个数,很容易想到按位搞事情
 7 其实自己是想到前半部分的,但是经验不够,不知道怎么运用,积累重要。
 8 */
 9 #include <cstdio>
10 #include <iostream>
11 #include <cstring>
12 #include <algorithm>
13 #include <queue>
14 #include <vector>
15 #include <ctime>
16 #include <cmath>
17 #define inf 0x3f3f3f3f
18 #define ll long long
19 #define N 200010
20 #define mem(f,a) memset(f,a,sizeof(f))
21 #define Run(i,l,r) for(int i=l;i<=r;i++)
22 #define Don(i,l,r) for(int i=l;i>=r;i--)
23 #define Eun(i,u,E) for(int i=head[u],v=E[i].v;i!=-1;i=E[i].next,v=E[i].v)
24 using namespace std;
25 int n,a[N],pre[N],num[N],s[N],top,ans[N];
26 void solve()
27 {    mem(pre,0); mem(num,0); top=0;
28     Run(i,1,n){
29         while (top&&a[s[top-1]]<=a[i]) top--;
30         s[top++]=i;
31         Run(j,0,15){
32             if (a[i]&(1<<j)) {
33                 pre[j]=i;
34                 num[i]=a[i];
35             }
36             else num[pre[j]]|=a[i];
37         }
38         Run(j,0,15)if (pre[j]){
39             int l=0,r=top-1;
40             while (l<r){
41                 int mid=(l+r)/2;
42                 if (s[mid]>=pre[j]) r=mid;
43                 else l=mid+1;
44             }
45         int maxn=a[s[l]];
46         ans[i-pre[j]+1]=max(ans[i-pre[j]+1],maxn+num[pre[j]]);
47         }
48     }
49 }
50 int main()
51 {    freopen("B.in","r",stdin);
52     freopen("B.out","w",stdout);
53     scanf("%d",&n);
54     Run(i,1,n){
55         scanf("%d",&a[i]);
56     }
57     solve();
58     Run(i,1,n/2) a[i]=a[n-i+1];
59     solve();
60     Run(i,1,n){
61         ans[i]=max(ans[i-1],ans[i]);
62         printf("%d\n",ans[i]);
63     }
64     return 0;
65 }//by tkys_Austin;

View Code

转载于:https://www.cnblogs.com/Damitu/p/8167738.html

【17.12.22.B】相关推荐

  1. 方舟等级生成工具 V2.6!支持属性倍数设置!每级经验可调!【2018.12.22更新】

    #程序介绍: 仅支持Sream版本,包括破解版和正式版. 研究点数为每级点数. 每个属性最多加点255点!!!每个属性最多加点255点!!!每个属性最多加点255点!!! 重要的事情说3遍!!! #更 ...

  2. 【10月22日】黑鹰红客基地每日软件更新

    [10月22日]黑鹰红客基地每日软件更新 以下软件均来自[color=red]黑鹰红客基地[/color].由于本站加了防盗连功能.所以请大家到连接中自行下载.很多黑客类软件很多都会被杀毒软件列为病毒 ...

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

    https://www.luogu.com.cn/problem/P2240 /* P2240 [深基12.例1]部分背包问题 https://www.luogu.com.cn/problem/P22 ...

  4. 欢乐纪中某B组赛【2018.12.22】

    前言 全暴力第9了解一下, 成绩 RankRankRank是有算别人的 RankRankRank PersonPersonPerson ScoreScoreScore AAA BBB CCC 999 ...

  5. 51CTO博客2.0 答疑QA文档【2017.12.04更新】

    博客2.0 – v1.0.0,以匠心精神,做好最重要的事 [Markdown编辑器]样式不错乱,减去调整的烦恼 [图片拖拽复制]再也不用一张张上传了,写文更高效 [文章目录自动提取]想看哪里点哪里 [ ...

  6. CSDN上新啦!编辑器新增发文助手功能【8月22日】

    "我爱周一!我爱上班!上班使我开心!为什么开心?因为CSDN又出更新!".时间真的像长了脚的妖怪,跑得飞快,不知不觉又到周一,「有干劲的C菌」又来向各位用户大大汇报一周更新内容啦! ...

  7. 【2021.12.22】数学基础

    文章目录 实验一(求最大公因数) 1.1 实验要求 1.2 设计思路 1.3 测试数据 1.4 测试结果 1.5 调试过程中发现的问题与解决办法 1.6 源程序 实验二(因式分解) 2.1 实验要求 ...

  8. 【07月22日】泡泡。纪念(高手进阶)

    1 前言 凌晨.两点半. 这是离别泡泡的纪念. 原本从来不玩网络游戏,也许因为偶尔某次她的提及,开始接触泡泡.如今她已经远去.我却留恋依然. 可是,我又开始厌倦.一如既往,当初做设计的时候,在网络上再 ...

  9. 自动控制原理【2021/12/19更新】

    目录 写在前面 (一) 控制系统导论 (二) 系统数学模型 (1) 微分方程 (2) 传递函数 (3) 方框图 (4) 信号流图 (三) 反馈控制系统的特性与性能 (1) 误差信号 (2) 二阶系统性 ...

最新文章

  1. 业界丨2018年人工智能和机器学习路在何方? 看看美国公司准备怎么做
  2. 自动化运维-云装机实践
  3. TweetLouder.com:在微博上找你喜好的乐队
  4. halcon深度学习算子,持续更新
  5. js实现modbus_nodejs中使用modbus-serial库创建Modbus TCP读取设备的数据
  6. map集合——阅读理解(洛谷 P3879)
  7. jlpt报名系统显示网络错误和服务器忙,批改网作文提交不了一直显示服务器或网络错误...
  8. Jmeter接口测试三种类型
  9. eclipse中配置文件设置字符集
  10. kali解压deb_Kali下安装网易云音乐
  11. love2d 1. 入门
  12. Inside Real-Time Linux
  13. Ps钢笔工具抠图、更换背景及边缘优化步骤
  14. 这些数据爬虫网站,帮你工作提质增效,还不收藏?
  15. 统计正数和负数的个数用C语言数组,输入10个整数统计其中的正数和负数的个数,用数组实现...
  16. java中文转换工具类
  17. ROS系统SLAM基础学习:gazebo仿真机器人自主导航
  18. TypeError: xxx() missing 1 required positional argument: 'xxx'
  19. 菜鸟网MySql教程
  20. C/C++仓库管理系统

热门文章

  1. 王者荣耀服务器什么时候维护结束,王者荣耀维护更新到几点 王者荣耀今天维护多久 新赛季几点维护完?...
  2. 超全MES系统知识普及,必读此文
  3. HOW UNREAL RENDERS A FRAME
  4. 关于win 右键菜单“新建” 项消失
  5. 使用微PE工具箱安装Win10系统步骤
  6. 《超大流量分布式系统架构解决方案-人人都是架构师2.0》读书笔记
  7. Django建立一个音乐网站(一)
  8. ChatGPT会砸了谷歌的饭碗吗?(附彩蛋)
  9. 打造高效的项目团队,促进项目进度管理
  10. 【大数据科普系列之二】大数据运维工程师