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 个非负整数,表示 ...
随机推荐
- Netty入门教程:Netty拆包粘包技术讲解
Netty编解码技术是什么意思呢?所谓的编解码技术,说白了就是java序列化技术.序列化有两个目的: 1.进行网络传输2.对象持久化 虽然我们可以使用java进行序列化,Netty去传输.但是java ...
- Java中常量定义在interface和class的区别(转)
最终结论:定义常量在interface和class中其实都行,关键是看你的设计和个人爱好. Java中interface中定义变量默认都是"public static final" ...
- PHP实现INT型,SHORT型,STRING转换成BYTE数组
实现PHP实现INT型,SHORT型,STRING转换成BYTE数组的转化: class Bytes { public static function integerToBytes($val) { $ ...
- uibutton去掉点击后背景有阴影的方法
1,将normal和highlight两种方式都设置上图片即可 UIButton *goback = [[UIButton alloc]initWithFrame:CGRectMake(5.0f, 5 ...
- 【hibernate/JPA】注解方式实现 复合主键【spring boot】
1>hibernate/JPA实现复合主键的思路:是将所有的主键属性封装在一个主键类中,提供给需要复合主键的实体类使用. 2>主键类的几点要求: . 使用复合主键的实体类必须实现Seria ...
- Blazor——Asp.net core的新前端框架
原文:Blazor--Asp.net core的新前端框架 Blazor是微软在Asp.net core 3.0中推出的一个前端MVVM模型,它可以利用Razor页面引擎和C#作为脚本语言来构建WEB ...
- 转:给 Android 开发者的 RxJava 详解
转自: http://gank.io/post/560e15be2dca930e00da1083 评注:多图解析,但是我还是未看懂. 前言 我从去年开始使用 RxJava ,到现在一年多了.今年加入 ...
- android存储訪问框架Storage Access Framework
在了解storage access framework之前.我们先来看看android4.4中的一个特性.假设我们希望能选择android手机中的一张图片,通常都是发送一个Intent给对应的程序.一 ...
- Android studio 升级,不用下载完整版,完美更新到2.0
Android studio 2.0 公布已有一旦时间,据说,速度大大提高了.但是一直没有尝试更新,看到大家相继更新,所以迫不及待就准备更新,但是.更新之路确实异常坎坷.询问度娘,千奇百怪的问题接憧而 ...
- Cocos2d-x学习资源
1.CSDN博客:http://blog.csdn.net/legendof1991/article/category/2161091.主要讲的Cocos2d-x3.0 2.CSDN博客:http:/ ...