题目链接:

[GXOI/GZOI2019]与或和

既然求的是二进制运算的和,那么我们按位考虑,这样就将矩阵变成了一个$01$矩阵。

对于或运算,就是求有多少个子矩形中有$1$。

直接求不好办,考虑有多少个矩形只有$0$。

我们统计以每个$0$为矩形右下角的矩形有多少个。

对于第$i$行的每一列维护出从这一行开始往上有多少个连续的$0$。

现在问题就变成了对于第$i$行的每一列,之前有多少个格子能作为矩形的左上角和它匹配。

用单调栈维护一个单调递增的序列对每行分别统计答案即可。

对于与运算,就是将总子矩形数$-$包含$0$的子矩形数,对$0$再做一遍即可。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<bitset>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define pr pair<int,int>
using namespace std;
const int mod=1e9+7;
ll ans1,ans2;
int a[1010][1010];
int b[1010][1010];
int n;
int mx[1010];
int top;
pr st[1010];
ll sum;
ll find1()
{
memset(mx,0,sizeof(mx));
ll res=0;
for(int i=1;i<=n;++i)
{
ll num=0;
top=0;
for(int j=1;j<=n;++j)
{
mx[j]=b[i][j]?mx[j]+1:0;
int len=1;
while(top&&st[top].first>=mx[j])
{
num-=st[top].first*st[top].second;
len+=st[top].second;
top--;
}
num+=mx[j]*len;
res=(res+num)%mod;
st[++top]=make_pair(mx[j],len);
}
}
return res;
}
ll find2()
{
memset(mx,0,sizeof(mx));
ll res=0;
for(int i=1;i<=n;++i)
{
ll num=0;
top=0;
for(int j=1;j<=n;++j)
{
mx[j]=(!b[i][j])?mx[j]+1:0;
int len=1;
while(top&&st[top].first>=mx[j])
{
num-=st[top].first*st[top].second;
len+=st[top].second;
top--;
}
num+=mx[j]*len;
res=(res+num)%mod;
st[++top]=make_pair(mx[j],len);
}
}
return res;
}
int main()
{
scanf("%d",&n);
sum=1ll*n*(n+1)/2*n*(n+1)/2;
sum%=mod;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
scanf("%d",&a[i][j]);
}
}
for(int k=0;k<=31;++k)
{
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
if(a[i][j]&(1<<k))
{
b[i][j]=1;
}
else
{
b[i][j]=0;
}
}
}
ans1+=(1ll<<k)%mod*find1()%mod,ans1%=mod;
ans2+=(1ll<<k)%mod*(sum-find2()+mod)%mod,ans2%=mod;
}
ans1=(ans1%mod+mod)%mod,ans2=(ans2%mod+mod)%mod;
printf("%lld %lld",ans1,ans2);
}

[LOJ3083][GXOI/GZOI2019]与或和——单调栈的更多相关文章

  1. 洛谷.5300.[GXOI/GZOI2019]与或和(单调栈)

    LOJ BZOJ 洛谷 想了一个奇葩的单调栈,算的时候要在中间取\(\min\),感觉不靠谱不写了=-= 调了十分钟发现输出没取模=v= BZOJ好逗逼啊 题面连pdf都不挂了 哈哈哈哈 枚举每一位. ...

  2. [GXOI/GZOI2019]与或和(单调栈)

    想了想决定把这几题也随便水个解题报告... bzoj  luogu 思路: 首先肯定得拆成二进制30位啊 此后每一位的就是个01矩阵 Q1就是全是1的矩阵个数 Q2就是总矩阵个数减去全是0的矩阵个数 ...

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

    [BZOJ5502][GXOI/GZOI2019]与或和(单调栈) 题面 BZOJ 洛谷 题解 看到位运算就直接拆位,于是问题变成了求有多少个全\(0\)子矩阵和有多少个全\(1\)子矩阵. 这两个操 ...

  4. LOJ#3083.「GXOI / GZOI2019」与或和_单调栈_拆位

    #3083. 「GXOI / GZOI2019」与或和 题目大意 给定一个\(N\times N\)的矩阵,求所有子矩阵的\(AND(\&)\)之和.\(OR(|)\)之和. 数据范围 \(1 ...

  5. 「洛谷5300」「GXOI/GZOI2019」与或和【单调栈+二进制转化】

    题目链接 [洛谷传送门] 题解 按位处理. 把每一位对应的图都处理出来 然后单调栈处理一下就好了. \(and\)操作处理全\(1\). \(or\)操作处理全\(0\). 代码 #include & ...

  6. LOJ#3083. 「GXOI / GZOI2019」与或和(单调栈)

    题面 传送门 题解 按位考虑贡献,如果\(mp[i][j]\)这一位为\(1\)就设为\(1\)否则设为\(0\),对\(or\)的贡献就是全为\(1\)的子矩阵个数,对\(and\)的贡献就是总矩阵 ...

  7. [GXOI/GZOI2019]与或和(位运算,单调栈)

    题目链接懒得放了. 题目大意懒得写了. 省选原题哪有找不到的…… 说实话,其实这题是个大水题,被我十秒钟内口胡出来了. 首先位运算除了拆位还能干啥?以下以与为例,或是差不多的. 我们考虑有多少个子矩阵 ...

  8. [GX/GZOI2019]与或和(单调栈+按位运算)

    首先看到与或,很显然想到按照位拆分运算.然后就变成了0/1矩阵,要使矩阵在当前位与为1,则矩阵全为1,如果是或为1,则是矩阵不全为0,然后求全为0/1的矩阵个数即可.记录c[i][j]表示以a[i][ ...

  9. P5300 [GXOI/GZOI2019]与或和

    题目地址:P5300 [GXOI/GZOI2019]与或和 考虑按位计算贡献 对于 AND 运算,只有全 \(1\) 子矩阵才会有贡献 对于 OR 运算,所以非全 \(0\) 子矩阵均有贡献 如果求一 ...

随机推荐

  1. 关系型数据库中主键(primary key)和外键(foreign key)的概念。

    刚接触关系型数据库的同学,会听过主键和外键的概念.这是关系型数据库的基本概念,需要清楚理解.今天我就以简洁的语言总结一下这个概念. 主键.一句话概括:一张表中,可以用于唯一标识一条记录的字段组(或者说 ...

  2. Android 应用的逆向和审计

    Android 应用程序拆解 Android 应用程序是在开发应用程序时创建的数据和资源文件的归档文件. Android 应用程序的扩展名是.apk,意思是应用程序包,在大多数情况下包括以下文件和文件 ...

  3. asp.net/wingtip/显示数据和详细信息

    前边我们的工作处于wingtip工程基础建设阶段,先是建立了“数据访问层”,然后设计建设了“UI和导航”的框架,接下来要充实工程的内容,显示“数据和详细信息”. 一. 添加数据控件(Data Cont ...

  4. Java新知识系列 七

    抽象类和接口的区别和特点 java的JDK中包含的五个工具 编译型语言和解释型语言 Java和C++的区别` 常见的ASCII的值 Forward和Redirect之间的对比 Web Service ...

  5. Docker 创建 Confluence6.12.2 中文版

    目录 目录 1.介绍 1.1.什么是Confluence? 2.Confluence的官网在哪里? 3.如何下载安装? 4.对 Confluence 进行配置 4.1.设置 Confluence 4. ...

  6. Django 如何让ajax的POST方法带上CSRF令牌

    问题 大家知道,在大前端领域,有一种叫做ajax的东东,即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),它被用来在不刷新页面的情况下,提 ...

  7. 如何在MongoDB设计存储你的数据(JSON化)?

    第一步 定义要描述的数据集 当我们决定将数据存储下来的时候,我们首先要回答的一个问题就是:“我打算存储什么样的数据?这些数据之间有什么关系?实体之间有什么关系?实体的属性之间有什么关系”. 为了说明问 ...

  8. cesium加载纽约市3dtiles模型

    const tileset = new Cesium.Cesium3DTileset({ url: '../../assets/data/NewYork/tileset.json' }); viewe ...

  9. easyUI行删除

    function removeRow(target,number) { if (number) { var index = getRowIndex(target); $datagrid.datagri ...

  10. jquery 选择器、筛选器、事件绑定与事件委派

    一.jQuery简介 1.可用的jQuery服务器网站:https://www.bootcdn.cn/ jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTMLdocume ...