CSAcademy Or Problem

传送门

一口大锅(

斜率的确是有单调性 并且可以进行凸优化的 明明是证出来的 为什么自己就不相信呢(


我们发现对于当前点作为扩展的右端点 那么他前面至多有20个点会影响到这一段区间的或值 我们可以预处理记录出来这些节点的位置 很明显 答案随着右端点越向右是非严格递增的 所以直接取最右端的节点即可

我们列出方程 f[i][k]= max(f[j][k-1]+ x ,f[i][k])状态是nk转移log 显然可以进行凸优化

因为答案随着段数增加非严格递增 分析一波段数少的可以记录答案就结束啦

 

有关于单调性的证明如下。

我们可以将原始的问题转化成 我们每次选择两个位置进行合并 代价为这两段的&

我们需要进行n-k次合并 并且要最小化&

这个显然是有单调性的 因为 我们少合并一次就可以减少代价 并且这个代价必定是单调的 因为 最开始的&只是小段的& 随着合并的段数长度增加 这一段的或值显然是非严格递增的 那么&的值显然也是非严格递增的

这样的话就证完了。

 

一个小问题 : log运算非常慢( 会因为这玩意T掉 所以那nlg个区间或值预处理出来比较好

附代码。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define inf 2002122500
#define ll long long
using namespace std;int a[100010],p[100010][21],fr[21],l[21],lg[100010];
ll f[100010],tot;int qaq[100010][21];int g[100010];
int n,k;
struct ST
{int f[100010][18];void build(){for(int i=1;i<=n;i++)	f[i][0]=a[i];for(int i=1;i<18;i++)for(int j=1;j+(1<<i-1)<=n;j++)f[j][i]=f[j][i-1]|f[j+(1<<i-1)][i-1];}int query(int l,int r){int k=lg[r-l+1];return f[l][k]|f[r-(1<<k)+1][k];}
}st;void find(int x)
{p[x][0]=x;qaq[x][0]=a[x];int cnt=0;for(int i=0;i<=20;i++)if((!(a[x]&(1<<i)))&&fr[i])	p[x][++cnt]=fr[i],qaq[x][cnt]=st.query(fr[i],x);p[x][++cnt]=1;qaq[x][cnt]=st.query(1,x);
}
bool check(int mid)
{for(int i=1;i<=n;i++)	f[i]=-inf,g[i]=inf;for(int i=1;i<=n;i++){for(int j=0;j<=20&&p[i][j];j++){//printf("%d %d %d\n",i,j,p[i][j]);ll tmp=qaq[i][j]+mid+f[p[i][j]-1];if(tmp>f[i]||(tmp==f[i] && g[p[i][j]-1] +1 <g[i]))g[i]=g[p[i][j]-1]+1,f[i]=tmp;}}//printf("%d %d %d\n",f[n],g[n],mid);return g[n]<=k;
}
int main()
{//freopen("orSimple.in","r",stdin);scanf("%d%d",&n,&k);for(int i=1;i<=n;i++)	scanf("%d",&a[i]),tot+=a[i];st.build();l[0]=1;int i;for(i=1;i<18;i++){l[i]=(1<<i);//printf("%d %d\n",i,l[i]);if(l[i]>=n)	break;for(int j=l[i-1];j<l[i];j++)	lg[j]=i-1;}for(int j=l[i-1];j<=n;j++)	lg[j]=i-1;int l,r;for(int i=1;i<=n;i++){find(i);for(int j=0;j<=20;j++)if(a[i]&(1<<j))	fr[j]=i;}l=-inf;r=0;ll ans;while(l<=r){int mid=(l+r)>>1;if(check(mid))	l=mid+1,ans=f[n]-(ll)mid*k;else	r=mid-1;}printf("%lld\n",ans);return 0;
}
/**
21 9
3 4 1 4 8 10 9 38 83 3 28 4 2 1 14 41 31 41 39 5 2
*/

 

转载于:https://www.cnblogs.com/hanyuweining/p/10321914.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apache的rewrite模块实例操作

原文链接&#xff1a;http://blog.5ilinux.com/archives/2006/01/apacherewrite.html 我们的目标是把http://www.bulknews.cn/show.php?id1014700通过rewrite的url重写&#xff0c;使可以直接http://www.bulknews.cn/1014700.html访问 1.首先配置apache的httpd.conf&#xf…

哈佛图书馆的二十条训言

1.此刻打盹&#xff0c;你将做梦;而此刻学习&#xff0c;你将圆梦。 2.我荒废的今日&#xff0c;正是昨日殒身之人祈求的明日。 3.觉得为时已晚的时候&#xff0c;恰恰是最早的时候。 4.勿将今日之事拖到明日。 5.学习时的苦痛是暂时的&#xff0c;未学到的痛苦是终生的。 6.学…

python截取关键字后的字符串_使用正则表达式获取python中特定字符串之后的所有内容...

如果要使用正则表达式&#xff0c;请使用re.findall&#xff1a;re.findall((?<com/).*$, "www.example.com/thedubaimall") # [thedubaimall] 一些速度测试有DeepSpace的建议&#xff1a;%timeit re.findall((?<com/).*$, "www.example.com/thedubaima…

vue起手式

许久未曾更新文章&#xff0c;虽然不是程序员但还是忘怀不了撸码的觉悟.1.VUE环境搭建安装node.js (项目开发前准备) Node.js官网&#xff1a;https://nodejs.org/en/ 进入Node.js官网&#xff0c;选择下载并安装Node.js。安装过程只需要点击“下一步”即可&#xff0c;非常简单…

C#编程尽量使用接口(转)

.NET框架包括类和接口&#xff0c;在编写程序的时候&#xff0c;你可能知道正在用.NET的哪个类。然而&#xff0c;在这种情况下如果你用.NET支持的接口而不是它的类来编程时&#xff0c;代码会变得更加稳定、可用性会更高。请分析下面的代码&#xff1a; private void LoadLi…

Apache 重写规则的常见应用 (rewrite)

本文出自:http://www.linuxforum.net 作者:吴阿亭 Jephe wu (2001-09-05 08:00:00) 一:目的 本文旨在提供如何用Apache重写规则来解决一些常见的URL重写方法的问题&#xff0c;通过常见的 实例给用户一些使用重写规则的基本方法和线索。 二:为什么需要用重写规则&#xff1…

python怎么模拟浏览器交互_干货分享:python爬虫模拟浏览器的两种方法实例分析(赶紧收藏)...

今天为大家带来的内容是&#xff1a;干货分享&#xff1a;python爬虫模拟浏览器的两种方法实例分析&#xff08;赶紧收藏&#xff09; 文章主要介绍了python爬虫模拟浏览器的两种方法,结合实例形式分析了Python爬虫模拟浏览器的两种常见操作技巧与使用注意事项,需要的朋友可以参…

vue-cli3

github&#xff1a;https://github.com/vuejs/vue-cli org&#xff1a;https://cli.vuejs.org/ guide&#xff1a;https://cli.vuejs.org/guide/ config&#xff1a;https://cli.vuejs.org/config/ 转载于:https://www.cnblogs.com/veritas-sj/p/10147789.html

Indy中判断邮件来源

首先从TidMessage中获得邮件的头信息&#xff1a; strHeader:aIdMessage.Headers.text; 然后&#xff0c;用正则表达式取出Received: vReceiveIP:GetNeedStrByPerlReg(strHeader,(Received:)(.)(])); 再取出X-Originating-IP&#xff1a; vOriIP:GetNeedStrByPerlReg(strHea…

用jQuery实现弹出窗口/弹出div层

原文链接&#xff1a;http://hi.baidu.com/awz_tiger/item/863cfc10c4bb0f6171d5e8d9 http://blog.163.com/qiuxinke2006126/blog/static/24885580201131763139536/ http://hi.baidu.com/kilwin/blog/item/f4cfaf2695375920c9955947.html 用div层代替传统的弹出窗口已经变得很…

模块定义文件导出类_浓缩的就是精华——ES6模块精炼讲解

概述在 ES6 前&#xff0c; 实现模块化使用的是 RequireJS 或者 seaJS(分别是基于 AMD 规范的模块化库&#xff0c; 和基于 CMD 规范的模块化库)。ES6 引入了模块化&#xff0c;其设计思想是在编译时就能确定模块的依赖关系&#xff0c;以及输入和输出的变量。ES6 的模块化分为…

关于快速开发和设计应用系统的一些个人的意见

作为程序员&#xff0c;经常会为我们的客户去开发和设计各种应用系统&#xff0c;比如OA /CRM/物流调度/客户服务/电子政务。。。及各种管理信息系统&#xff0c;我们经常会去开发和实现这样的一些系统&#xff0c;每周、每月、每年经常都要去做这样的一些开发工作&#xff0c;…

Jquery1.6版本后attr的变化

原文链接&#xff1a;http://www.cnblogs.com/-run/archive/2011/11/16/2251569.html Jquery1.6版本后attr的变化 Jquery1.6版本后 attr 改动后的效果&#xff1a; jquery1.6版本&#xff1a; 下文来自www.jquery.com The difference betweenattributes and properties can b…

idea main scanner 输入_哇晒,你竟然不知道idea的 Live Templates

最近公司新近来一名程序猿&#xff0c;在写代码时&#xff0c;美美写到System.out.println的时候&#xff0c;都要一母不差的用键盘敲上去&#xff0c;我问他你之前有用过eclipse中的快捷方法syso吗&#xff1f;于是&#xff0c;我给他介绍了一下&#xff0c;在idea中如何自定义…

Android开发需要了解的 IM 知识

引言即便在通讯如此发达的今天&#xff0c;IM 也依然是诸多场景下非常重要的基础能力。因此做为 一名 Android 开发&#xff0c;不可避免的会遇到一些IM 相关的需求或问题。本文以一个Android开发的角度来讲述IM 开发相关的基础知识。想要阅读更多技术干货、行业洞察&#xff0…

偷梁换柱做自己的封装系统

偷梁换柱做自己的封装系统&#xff01;菜鸟一开始都想把自己的信息加到系统里&#xff0c;但封装系统只会一点&#xff01;但我们可“拿来”&#xff0c;我们可以用偷梁换柱的方法来修改别人的系统&#xff0c;本文以雨林的GHOST5.0系统为例。一、准备工作1、当然是下载一个自己…

JQuery 1.6+ checkbox 状态选择

示例&#xff1a; HTML: <form><table><tr><td><input type"checkbox" id"select_all"/></td></tr><tr><td><input type"checkbox" name"select[]"/></td></…

台电u盘量产工具_简单几步,让U盘起死回生

如今&#xff0c;虽说云存储风靡&#xff0c;但U盘仍存在价值&#xff0c;毕竟在很多场合并不方便上网&#xff0c;即便如此网上存储有时也并不方便&#xff0c;也不安全。与此同时&#xff0c;如果是大文件存储&#xff0c;云盘上传和下载速度非常慢&#xff0c;并不适合海量数…

PXC集群常见错误(一)

欢迎关注MySQL 8.0必知必会系列课程。MySQL8.0必知必会-自动化部署 https://edu.51cto.com/course/16368.htmlMySQL8.0必知必会之参数标准化配置 https://edu.51cto.com/course/16358.html1.Cant start server: Bind on TCP/IP port: Address already in use…

获取GridView中RowCommand的当前选中行的索引或主键Id

获取GridView中RowCommand的当前索引行 前台添加一模版列,里面添加一个LinkButton前台 (如果在后台代码中用e.CommandArgument取值的话前台代码就必须在按钮中设置CommandArgument的值&#xff0c;值为绑定的数据库字段<asp:TemplateField HeaderText"操作"> …