bzoj4750
2024-09-06 18:03:15
单调栈+前缀和
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 ;
}
最新文章
- swift-可选值
- 简单java在线测评程序
- URL(统一资源定位符)结构和注意事项
- 菜鸟学Windows Phone 8开发(1)——创建第一个应用程序
- 解决:Angular-cli:执行ng-build --prod后,dist文件里无js文件、文件未压缩等问题
- Address already in use: JVM_Bind<;null>;:8080错误的解决办法
- jquery里用each遍历的值存到数组和字符串
- Android 设置thumb图片大小
- querystring,parse和stringify相互转换
- Signing key has not been configured
- HTML常用标签属性图
- fullCalendar:中文API
- gsoap:实现线程池处理时获取到客户端的ip
- Spring+SpringMVc+Mybatis实现数据库查询
- C语言的结构和联合,以及PHP是怎么实现弱类型的
- 有源汇有上下界最小流 DInic + 各种优化 模板
- MyBatis的核心配置、动态sql、关联映射(快速总结)
- jsp页面\n换行替换
- HTTP.ResponseCode
- Django权限系统auth
热门文章
- Limitations of Forms Personalization (文档 ID 420518.1)
- Redhat常用指令
- [Cypress] install, configure, and script Cypress for JavaScript web applications -- part2
- Andriod 从源码的角度详解View,ViewGroup的Touch事件的分发机制
- 性能測试JMeter趟的坑之JMeter的bug:TPS周期性波动问题
- 常见ODBC及OLEDB连接串的写法
- WCF 内存入口检查失败 Memory gates checking failed
- Linux主要命令
- Apache Qpid Broker的安全机制
- Java中的常用异常处理方法