bzoj4750
单调栈+前缀和
max很明显用单调栈搞,但是异或和呢?异或和我们拆位,对于每段区间的异或和[l[i]-i],[i,r[i]]答案就是0->1,1->0的乘积,但是统计的时候事实上是[l[i]-2,i-1],因为异或和本身是前缀和,所以要-1,单调栈又是一个前缀和,也要-1,所以就是-2
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + , mod = 1e9 + ;
int n;
int l[N], r[N], st[N];
ll a[N], sum[N][];
void up(ll &x, const ll &t)
{
x = ((x + t) % mod + mod) % mod;
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
int top = ;
ll ans = , tot = ;
scanf("%d", &n);
for(int i = ; i <= n; ++i)
{
scanf("%lld", &a[i]);
tot = tot ^ a[i];
for(int j = ; j < ; ++j) sum[i][j] = sum[i - ][j] + ((tot & ( << j)) > );
}
for(int i = ; i <= n; ++i)
{
l[i] = r[i] = i;
while(top && a[i] > a[st[top]])
{
r[st[top - ]] = r[st[top]];
l[i] = l[st[top]];
--top;
}
st[++top] = i;
}
while(top) r[st[top - ]] = r[st[top]], --top;
for(int i = ; i <= n; ++i)
{
ll pw = ;
for(int j = ; j < ; ++j)
{
ll tmp1 = sum[r[i]][j] - sum[i - ][j], tmp2 = sum[i - ][j] - sum[max(l[i] - , )][j];
up(ans, tmp1 * (ll)(i - l[i] + - tmp2) % mod * pw % mod * a[i] % mod);
up(ans, (ll)(r[i] - i + - tmp1) * tmp2 % mod * pw % mod * a[i] % mod);
pw = pw * % mod;
}
}
printf("%lld\n", ans);
}
return ;
}
bzoj4750的更多相关文章
- bzoj4750: 密码安全
Description 有些人在社交网络中使用过许多的密码,我们通过将各种形式的信息转化为 01 信号,再转化为整数,可以将这个 人在一段时间内使用过的密码视为一个长度为 n 的非负整数序列 A_1, ...
- 【bzoj4750】密码安全 单调栈
题目描述 模10^9+61 输入 第一行包含一个正整数 T ,表示有 T 组测试数据. 接下来依次给出每组测试数据.对于每组测试数据: 第一行包含一个正整数 n . 第二行包含 n 个非负整数,表示 ...
随机推荐
- win7配置java环境变量
http://jingyan.baidu.com/article/9f63fb91d87fb0c8400f0e93.html 安装JDK,从Oracel官方网站上下载,也可以通过搜索,进入链接.下载完 ...
- [转]Visual Studio 2012 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解决方案
原文地址:http://www.cnblogs.com/gb2013/archive/2013/03/05/SecurityEnhancementsInTheCRT.html 在VS 2012 中编译 ...
- Mysql学习之十二:JDBC连接数据库之DriverManager方法
JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包括7个步骤: 1.载入JDBC驱动程序: 在连接数据库之前.首先要载入想要连接的数据库的驱动到JVM(Java虚拟机). 这通过java.l ...
- HDU 3118 Arbiter 判定奇圈
题目来源:pid=3118">HDU 3118 Arbiter 题意:翻译过来就是不能有奇圈 每走一步状态会变化 当他回到起点时假设和原来的状态不一样 可能会死 求至少去掉多少条边能够 ...
- weex 项目开发(二) weex 与 weexpack 的区别
1.weex 与 weexpack 即 weex-toolkit 与 weexpack 的区别 weex-toolkit 初始化的项目是针对开发单个 Weex 页面而设计的,也就是说这样的项目只包括 ...
- this、call和apply、bind
this关键字: JavaScript的this关键字,总是指向一个对象,具体指向哪个对象,是根据运行时函数指向环境动态绑定的.简单来说,this就是谁调用指向谁.具体使用中,this的指向,大致可以 ...
- 项目Beta冲刺(团队1/7)
项目Beta冲刺(团队1/7) 团队名称: 云打印 作业要求: 项目Beta冲刺(团队) 作业目标: 完成项目Beta版本 团队队员 队员学号 队员姓名 个人博客地址 备注 221600412 陈宇 ...
- vc6.0的一些快捷键
1.检测程序中的括号是否匹配 把光标移动到需要检测的括号(如大括号{}.方括号[].圆括号()和尖括号<>)前面,键入快捷键“Ctrl+]”.如果括号匹配正确,光标就跳到匹配的括号处 ...
- VUE 之 路由 VueRouter
1.VueRouter的安装 1.1.https://unpkg.com/vue-router/dist/vue-router.js下载安装. 1.2.<script src="./s ...
- iOS RAC常用方法
一直想写篇关于RAC的文章,一是分享二是做为笔记,由于项目忙先简单的贴一个自己当初学习的时候代码吧 一.RACCommand // RACCommand 的使用: 使用场景,监听按钮点击,网络请求 - ...