当前位置: 首页 > 编程日记 > 正文

【单调栈 前缀和 异或】7.21序列求和

还要再细细思考的奇妙思路

题目描述

小A最近喜欢上了关于区间max的问题。她定义一个区间的价值是max(ai)(l<=i<=r)(alxoral+1xor...xorar)max(ai)(l<=i<=r)∗(alxoral+1xor...xorar)她想要知道,一个序列所有的连续子序列价值之和是多少。

输入格式

第一行一个正整数n接下来一行n个正整数表示aiai

输出格式

一个正整数表示答案,mod1000000007mod1000000007输出

样例输入

4

1 2 3 4

样例输出

103

数据规模与约定

对于前30%的数据,n<=1000

对于前60%的数据,满足n<=3000

对于前80%的数据,满足n<=50000

对于100%的数据,满足1<=n<=105,ai<=109


题目分析

常规思路

见到这题的时候真的是一脸不可做。求和涉及到区间max和区间xor的乘积,整个状态数本身就是$O(n^2)$的,即便写一个转移$O(1)$的暴力也只有60pts。

从问题的表面上来看,状态对答案贡献很难拆开统计。因为如果寻找贡献的共同之处,会发现只有$max(ai)$的地方能够共用。但是还有xor的部分,依然有$O(n^2)$不尽相同的状态。

按位拆分

不过实际上只有我这种不老练选手觉得无从下手

引用HZQ的话:“碰到位运算+求和的问题一般都会考虑算每一位的贡献”。

这里“每一位”指的是二进制拆分后的每一位。

意识到二进制拆分之后,由于xor的性质,可以对于数位状态取方案数的前缀和。求出前缀和之后,“然后前缀xor和之后问题变成要从左区间选出一个前缀和是0,右区间选出一个前缀和是1或者从左区间选出一个前缀和是1,右区间选出一个前缀和是0的方案数。”。

换而言之就是在二进制上面一位一位算过去:当前位被算到答案里面几次。

思路挺妙的吧,但是好像对于老练的选手来说是道一眼题?……

 1 #include<bits/stdc++.h>
 2 const int MO = 1000000007;
 3 const int maxn = 100035;
 4 
 5 int n,a[maxn];
 6 int l[maxn],r[maxn];
 7 int stk[maxn],cnt;
 8 int s[maxn][2];
 9 int ans;
10 
11 int read()
12 {
13     char ch = getchar();
14     int num = 0, fl = 1;
15     for (; !isdigit(ch); ch = getchar())
16         if (ch=='-') fl = -1;
17     for (; isdigit(ch); ch = getchar())
18         num = (num<<1)+(num<<3)+ch-48;
19     return num*fl;
20 }
21 int main()
22 {
23     freopen("magic.in","r",stdin);
24     freopen("magic.out","w",stdout);
25     n = read();
26     for (int i=1; i<=n; i++) a[i] = read();
27     cnt = 0;
28     for (int i=1; i<=n; i++)      //单调栈处理max左边界
29     {
30         while (cnt&&a[stk[cnt]] < a[i]) cnt--;
31         l[i] = stk[cnt];
32         stk[++cnt] = i;
33     }
34     cnt = 0, stk[0] = n+1;
35     for (int i=n; i>=1; i--)      //单调栈处理max右边界
36     {
37         while (cnt&&a[stk[cnt]] <= a[i]) cnt--;
38         r[i] = stk[cnt];
39         stk[++cnt] = i;
40     }
41     s[1][0] = 1;             //处理数位边界条件
42     for (int t=1; t<=MO; t<<=1)    //按位统计贡献
43     {
44         int tot = 0;
45         for (int i=2; i<=n+1; i++)
46         {
47             tot ^= a[i-1];
48             if (tot&t)          //计算方案数前缀和
49                 s[i][1] = s[i-1][1]+1, s[i][0] = s[i-1][0];
50             else s[i][1] = s[i-1][1], s[i][0] = s[i-1][0]+1;
51         }
52         tot = 0;
53         for (int i=1; i<=n; i++)    //按照方案数统计贡献
54             tot = (tot+(1ll*(s[r[i]][0]-s[i][0])*(s[i][1]-s[l[i]][1])+1ll*(s[r[i]][1]-s[i][1])*(s[i][0]-s[l[i]][0]))%MO*a[i])%MO;
55         ans = (ans+1ll*t*tot)%MO;    //因为贡献的是这位的值,所以要乘t
56     }
57     printf("%d\n",ans);
58     return 0;
59 }

END

转载于:https://www.cnblogs.com/antiquality/p/9347851.html

相关文章:

hibernate 复合主键 根据主键删除_hibernate封装Utils工具类

一&#xff1a;封装Session对象1、获取全新的Session的对象 2、获取与线程绑定的的Session的对象二&#xff1a;什么是持久化类1、Hlbernate是持久层的ORM映射框架&#xff0c;专注于数据的持久化工作。所谓的持久化&#xff0c;就是将内存中的数据永久存储到关系型数据库中。 …

Linux+Qt 下同一数据空间vfork多进程间通信的一种高效便捷方式(信号槽直接调用)

LinuxQt 下同一数据空间vfork多进程间通信的一种高效便捷方式&#xff08;信号槽直接调用&#xff09; 概述 传统的多进程间通信往往非常麻烦&#xff0c;采用的方法比如管道&#xff0c;共享内存&#xff0c;socket&#xff0c;文件等&#xff0c;大都非常繁琐&#xff0c; …

Eclipse 调试器(引用IT168)

Eclipse 调试器&#xff1a;零距离接触实战技巧 2011年11月25日01:29IT168字号&#xff1a;T|T调试的方法虽然千千万万&#xff0c;但归根结底&#xff0c;就是找到引发错误的代码。Eclipse调试器的目标是让程序员能对本地或远程程序进行错误侦测与诊断。该调试器提供所有标准调…

Cisco交换机与路由器的密码恢复_路由交换

站长原创&#xff1a;歪歪IT技术网 首发&#xff1a;迷你兔 来51cto记录一下我们net人最不喜欢记的路由器和交换机的密码恢复问题&#xff0c;虽然很简单的几个步骤&#xff0c;但是我却总是记不住&#xff0c;应该不是记不住&#xff0c;就觉得用处不大&#xff0c;但工作中…

投影转换_即插即用,办公投影不用愁:毕亚兹Mini DP转HDMIVGA转换器

日常办公的时候一些办公小件也很有用的&#xff0c;就比如说HDMI&#xff0c;VGA的转接头&#xff0c;不起眼但是很实用。去客户那里汇报工作&#xff0c;笔记本没有VGA接口&#xff0c;结果会很尴尬&#xff0c;到处借&#xff0c;没有转接头就是接不了&#xff0c;所以索性还…

事件绑定在IE下this是window的问题

昨天写一个函数的时候&#xff0c;后来用了事件绑定&#xff0c;开始没在IE下测试&#xff0c;在chrome下都是没问题的。后来在IE下测试发现出错。 后来修改一下&#xff0c;发现oBox.οnclickfunction(){}没问题&#xff0c;而addEven(oBox, "click", function(){})…

nvidia-jetson系列硬件平台上安装Qt

nvidia-jetson系列硬件平台上安装Qt 目标平台: Jetson Nano、Jetson TX2、etson Xavier NX、Jetson AGX Xavier 概述: 系统环境: 我的设备是下列环境&#xff0c;其实只要是L4T版本的应该都是可以的 镜像烧录方式&#xff1a;SDKManager 系统镜像版本&#xff1a;L4T-32.…

以后在这里安家

以后在这里安家&#xff0c;希望在这里学到更多的知识&#xff0c;分享更多的快乐与汗水&#xff0c;希望大家共同成长转载于:https://blog.51cto.com/heyangfan88/804542

如何用git命令行上传本地代码到github

如何用git命令行上传本地代码到github 2016年09月19日 16:10:36 阅读数&#xff1a;9337注意&#xff1a;安装的前提条件是配置好git的相关环境或者安装好git.exe&#xff0c;此处不再重点提及 上传的步骤&#xff1a;(本文采用git 命令界面进行操作) &#xff08; git config …

C# 的快捷键汇总(一)

全局快捷键 ——〉下列快捷组合键可用于集成开发环境 (IDE) 中的不同位置 命令名 快捷键 说明 关系图.属性 Alt Enter 将焦点从关系图切换到“属性”窗口。 编辑.复制 Ctrl C 将选定项复制到剪贴板。 编辑.剪切 Ctrl X 从…

git修改远程仓库地址

原文连接: https://blog.csdn.net/u012852597/article/details/79241548 内容&#xff1a; 方法有三种&#xff1a; 1.修改命令 git remote set-url origin [url] 例如: git remote set-url origin gitlabgitlab.chumob.com:php/hasoffer.git2.先删后加 git remote rm or…

ftp主动和被动模式_【扫盲】FTP基础知识详解

关注我&#xff0c;你的眼睛会怀孕本文主要介绍FTP的工作原理&#xff0c;FTP主动与被动两种工作模式。FTP 简介FTP协议就是文件传输控制协议。它可以使文件通过网络从一台主机传送到同一网络的另一台主机上&#xff0c;而不受计算机类型和操作系统类型的限制。服务器、大型机&…

单页面与多页面的区别及优缺点

单页面应用&#xff08;SPA&#xff09;&#xff0c;通俗一点说就是指只有一个主页面的应用&#xff0c;浏览器一开始要加载所有必须的 html, js, css。所有的页面内容都包含在这个所谓的主页面中。但在写的时候&#xff0c;还是会分开写&#xff08;页面片段&#xff09;&…

git使用手册

git使用手册 由 赵庆鹏创建, 最后修改于十二月 14, 2018 一、文件比较 1. 新建两个文件hello/world&#xff0c;内容可自定义&#xff0c;两个文件的内容&#xff0c;需要不相同&#xff0c;进行文件比对。2. 使用diff -u hello world > diff.txt&#xff0c;进行文件比…

python 乒乓球_python乒乓球

这是我用python编的一个小游戏&#xff0c;需要下载simpleaudio库&#xff0c;喜欢的可以玩。 以下是源代码&#xff1a; import turtle as t import simpleaudio as sa yeahsa.WaveObject.from_wave_file(‘bounce.wav’) #创建背景 game t.Screen() game.title(‘双人乒乓球…

《深入浅出Windows Phone 8应用开发》

章节 第1章 概述第2章 开发环境第3章XAML简介第4章 常用控件第5章 布局管理第6章 数据存储第7章 图形动画第8章 多媒体 第9章 启动器与选择器 第10章 手机感应编程第11章 MVVM模式第12章 Silverlight Toolkit组件第13章 网络编程第14章 异步编程与并行编程第15章 联系人和日程安…

CentOS7.4到Elasticsearch一路坑(五)

来来&#xff0c;zookeeper我们聊聊 zookeeper我是搭建了一个集群的&#xff0c;但是搭建完发现&#xff0c;bin/zkServer.sh status一直是不正常的 看了一下日志&#xff0c;的确有问题&#xff08;有问题你还起来了&#xff1f;&#xff09; 从这篇文章参考了一下&#xff1a…

轻量级git服务器 Gogs git 服务器搭建

gogs搭建教程&#xff1a; 原文链接: https://garthwaite.org/docker-gogs.html 内容: Dockerized Gogs git server and alpine postgres in 20 minutes or less // under docker I’ve babysat gitlab omnibus before and it wasn’t any fun. So when a group of volunteer…

akaze特征匹配怎么去掉不合适的点_SIFT特征点

SIFT特征点图像特征点检测一直是研究的热点&#xff0c;从早期的harris角点检测开始&#xff0c;一直有很多人关注图像特征点的检测。最早人们关注图像中的角点&#xff0c;主要是因为角点能够代表图像中的一些特征。比如&#xff0c;通过检测两幅图像中的角点&#xff0c;可以…

fopen 中 按文本读写与按二进制读写 实例

参考&#xff1a;http://blog.csdn.net/hinyunsin/article/details/6401854 #include <stdio.h>int main(int argc, char *argv[]) {char he[20] "hello world\n";FILE *outfile fopen("t.txt", "wt");fwrite(he, sizeof(char), 20, out…

狼奔代码生成工具使用心得

狼奔代码生成工具(http://ltfwan.d33140.jit8.cn)是一款为程序员设计的代码生成器&#xff0c;更是一款软件项目智能开发平台&#xff0c;它可以自动生成ASP.NET页面及后台代码&#xff0c;采用了面向服务的架构&#xff08;SOA&#xff09;。那么&#xff0c;要如何通过狼奔代…

h5在手机端实现简单复制

<a href"https://blog-static.cnblogs.com/files/ruanqin/clipboard.min.js">下载clipborrdjs</a>  下载地址&#xff1a;https://blog-static.cnblogs.com/files/ruanqin/clipboard.min.js html中&#xff1a; <div id"app"> <a hr…

MQTT topic匹配规则

MQTT topic匹配规则 原文连接: https://blog.csdn.net/JiangCheng817/article/details/81333893 内容&#xff1a; 主题层级分隔符 “/”: 表示层级关系 单层通配符 “”: 订阅消息时使用&#xff0c;匹配一层主题如 a/ 匹配诸如 a/b a/c 但是不能匹配 a/b/c,特别的单独的可…

产品经理岗位职责说明_技术负责人岗位职责,五大方面,超越岗位抓住未来才是技术大牛...

技术负责人一般指建设领域、生产制造领域、电子商务领域&#xff0c;负责全过程的技术决策、技术指导。技术负责人的岗位职责包含五个方面&#xff1a;技术职责&#xff1a;负责具体技术方案设计思路、关键参数等技术决策&#xff0c;负责对所有技术人员进行具体技术实施时的技…

Jane Eyre

Do you think I could stay here to become nothing to you? Do you think because I am poor , and obscrue, and plain that I am soulless, and heartless? I have as much soul as you and fully as much heart. And if God gifted me beauty and wealth, I should have …

Ubuntu 10.04 LTS 网站权限不够

wordpress不能自动升级config文件没法写找不到目录wordpress修改无法保存。。。。这些都是权限不够。解决办法:给apache一个访问www目录的权限&#xff0c;一般linux的网站目录是/srv/www/此时用下面的命令&#xff1a;chown www-data:www-data /srv/www/ -r

简单配置nginx反向代理,实现跨域请求

简单配置nginx去做反向代理&#xff0c;实现跨域请求 简单介绍nginx的nginx.conf最核心的配置&#xff0c;去做反向代理&#xff0c;实现跨域请求。 更多详细配置&#xff0c;参考nginx官方文档 先介绍几个nginx命令 打开nginx.conf文件/usr/local/etc/nginx/nginx.conf重新加载…

c# redis hashid如何设置过期时间_Redis中Key过期策略amp;淘汰机制

1. Redis中设置Key过期时间我们有两种方式设置过期时间1.1 设置多久后过期设置一个 key 10s 过期&#xff0c;可以这样127.0.0.1:6379> SET key value EX 10127.0.0.1:6379> SET key value PX 10000PX 后面是毫秒ms&#xff0c;EX是秒。设置完成后&#xff0c;10s内&…

在CISCO路由器上配置DHCP与DHCP中继

企业网络中DHCP环境的搭建 企业DHCP需求描述&#xff1a; 在大型企业中&#xff0c;一般都有很多个部门&#xff0c;各部门之间有时要求不能互通&#xff0c;这可以通过使用VLAN来解决&#xff0c;但是上千个人IP配置也是一件极大耗费人力的事。所以我们迫切需求一种全自动的&a…

MQTT消息长度限制

原文连接: https://stackoverflow.com/questions/34522053/what-is-the-maximum-message-length-for-a-mqtt-broker 内容&#xff1a; 单条消息默认限制大小256MB&#xff0c;可以通过配置修改 It’s not entirely clear what you’re asking here, so I’ll answer both pos…