【BZOJ5502】[GXOI/GZOI2019]与或和(单调栈)

题面

BZOJ

洛谷

题解

看到位运算就直接拆位,于是问题变成了求有多少个全\(0\)子矩阵和有多少个全\(1\)子矩阵。

这两个操作本质就是一样的,不妨考虑有多少个全\(1\)子矩阵。

预处理出每个元素向上能够找的最多的\(1\)的个数,对于每一行从做往右扫一遍,拿一个单调栈维护一下,这样子就可以计算出以每个元素为右下角时的贡献了。

时间复杂度\(O(n^2logV)\),在BZOJ上因为常数太大T了QwQ。

#include<iostream>
#include<cstdio>
using namespace std;
#define MAX 1010
#define MOD 1000000007
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,a[MAX][MAX],b[MAX][MAX],u[MAX][MAX];
int Q[MAX],h,t,ans1=0,ans2=0;
int main()
{
n=read();
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)a[i][j]=read();
for(int k=0;k<31;++k)
{
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)b[i][j]=(a[i][j]>>k)&1;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(!b[i][j])u[i][j]=0;
else u[i][j]=u[i-1][j]+1;
for(int i=1;i<=n;++i)
{
Q[h=t=1]=0;int now=0;
for(int j=1;j<=n;++j)
{
while(h<t&&u[i][Q[t]]>=u[i][j])now=(now+MOD-1ll*(Q[t]-Q[t-1])*u[i][Q[t]]%MOD)%MOD,--t;
now=(now+1ll*(j-Q[t])*u[i][j])%MOD;Q[++t]=j;
ans1=(ans1+1ll*now*(1<<k))%MOD;
}
}
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)b[i][j]^=1;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(!b[i][j])u[i][j]=0;
else u[i][j]=u[i-1][j]+1;
ans2=(ans2+1ll*(1<<k)%MOD*(1ll*n*(n+1)/2*n*(n+1)/2%MOD)%MOD)%MOD;
for(int i=1;i<=n;++i)
{
Q[h=t=1]=0;int now=0;
for(int j=1;j<=n;++j)
{
while(h<t&&u[i][Q[t]]>=u[i][j])now=(now+MOD-1ll*(Q[t]-Q[t-1])*u[i][Q[t]]%MOD)%MOD,--t;
now=(now+1ll*(j-Q[t])*u[i][j])%MOD;Q[++t]=j;
ans2=(ans2+MOD-1ll*now*(1<<k)%MOD)%MOD;
}
}
continue;
}
printf("%d %d\n",ans1,ans2);
return 0;
}

最新文章

  1. bootstrap学习笔记--bootstrap布局方式
  2. webservice 接口通过 HTTP 获取数据
  3. node.js-session问题
  4. android 设置布局为无标题样式
  5. JS从剪切板里粘贴图片
  6. C#中使用ListView动态添加数据不闪烁并显示当前插入值
  7. [SAP ABAP开发技术总结]ABAP读写、解析XML文件
  8. 使用Xcode5开发时的icon取消高光效果
  9. [Tutorial] Using the RasPi as a WiFi hostspot
  10. IE下支持文本框和密码框placeholder效果的JQuery插件
  11. 新书《iOS8 Swift编程指南》货架
  12. WCF 学习笔记之异常处理
  13. python+NLTK 自然语言学习处理:环境搭建
  14. destoon数据库表解释说明
  15. css中自定义字体
  16. 16.IO之其他流
  17. 利用python实现电影推荐
  18. 情人节网站logo赏析
  19. 基础图像处理之混合空间增强——(Java:拉普拉斯锐化、Sobel边缘检测、均值滤波、伽马变换)
  20. 在windows下使用Cygwin模拟unix环境 并安装apt-cyg svn等插件

热门文章

  1. IEC104协议规约解析
  2. Android 技能图谱学习路线
  3. SpringMVC从认识到细化了解
  4. 第三篇 Html-label标签
  5. 某jiub笔试
  6. XPath Helper的安装与使用
  7. Python爬虫之Requests库的基本使用
  8. 我的第一个python web开发框架(28)——定制ORM(四)
  9. 如何使用U盘安装macOS high Sierra?
  10. maven-assembly-plugin打包可执行的jar包