单调栈+前缀和

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 ;
}

最新文章

  1. swift-可选值
  2. 简单java在线测评程序
  3. URL(统一资源定位符)结构和注意事项
  4. 菜鸟学Windows Phone 8开发(1)——创建第一个应用程序
  5. 解决:Angular-cli:执行ng-build --prod后,dist文件里无js文件、文件未压缩等问题
  6. Address already in use: JVM_Bind&lt;null&gt;:8080错误的解决办法
  7. jquery里用each遍历的值存到数组和字符串
  8. Android 设置thumb图片大小
  9. querystring,parse和stringify相互转换
  10. Signing key has not been configured
  11. HTML常用标签属性图
  12. fullCalendar:中文API
  13. gsoap:实现线程池处理时获取到客户端的ip
  14. Spring+SpringMVc+Mybatis实现数据库查询
  15. C语言的结构和联合,以及PHP是怎么实现弱类型的
  16. 有源汇有上下界最小流 DInic + 各种优化 模板
  17. MyBatis的核心配置、动态sql、关联映射(快速总结)
  18. jsp页面\n换行替换
  19. HTTP.ResponseCode
  20. Django权限系统auth

热门文章

  1. Limitations of Forms Personalization (文档 ID 420518.1)
  2. Redhat常用指令
  3. [Cypress] install, configure, and script Cypress for JavaScript web applications -- part2
  4. Andriod 从源码的角度详解View,ViewGroup的Touch事件的分发机制
  5. 性能測试JMeter趟的坑之JMeter的bug:TPS周期性波动问题
  6. 常见ODBC及OLEDB连接串的写法
  7. WCF 内存入口检查失败 Memory gates checking failed
  8. Linux主要命令
  9. Apache Qpid Broker的安全机制
  10. Java中的常用异常处理方法