[GXOI/GZOI2019]与或和
考虑拆位,计算每一个二进制位的贡献。
问题转化为求一个01矩阵的全0/1的子矩形个数。
考虑计算以第i行第j列为右下角的合法子矩形个数。
发现合法的左上角范围向左是单调下降的。
可以用一个单调栈来维护合法的范围。
这样做总复杂度O(n^2logn)
#include<bits/stdc++.h>
#define N 2200
#define eps 1e-7
#define inf 1e9+7
#define db double
#define ll long long
#define ldb long double
using namespace std;
inline int read()
{
	char ch=0;
	int x=0,flag=1;
	while(!isdigit(ch)){ch=getchar();if(ch=='-')flag=-1;}
	while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
	return x*flag;
}
const int mo=1e9+7;
int n,f[N],w[N],st[N],s[N][N];
int work1()
{
	int res=0;
	for(int o=0;o<=31;o++)
	{
		int ans=0;
		for(int i=1;i<=n;i++)f[i]=0;
		for(int x=1;x<=n;x++)
		{
			for(int i=1;i<=n;i++)f[i]=((1<<o)&s[x][i])?f[i]+1:0;
			for(int i=1,top=0;i<=n;i++)
			{
				while(top&&f[st[top]]>f[i])top--;
				st[++top]=i;w[top]=(w[top-1]+(1ll*(st[top]-st[top-1])*f[i]%mo))%mo;
				ans=(ans+w[top])%mo;
			}
		}
		res=(res+(1ll*(1<<o)*ans%mo))%mo;
	}
	return (res%mo+mo)%mo;
}
int work2()
{
	int res=0;
	for(int o=0;o<=31;o++)
	{
		int ans=0;
		for(int i=1;i<=n;i++)f[i]=0;
		for(int x=1;x<=n;x++)
		{
			for(int i=1;i<=n;i++)f[i]=(!((1<<o)&s[x][i]))?f[i]+1:0;
			for(int i=1,top=0;i<=n;i++)
			{
				while(top&&f[st[top]]>f[i])top--;
				st[++top]=i;w[top]=(w[top-1]+(1ll*(st[top]-st[top-1])*f[i]%mo))%mo;
				ans=(ans+w[top])%mo;
			}
		}
		ans=((1ll*(n*(n+1)/2)*(n*(n+1)/2)%mo)-ans)%mo;
		res=(res+(1ll*(1<<o)*ans%mo))%mo;
	}
	return (res%mo+mo)%mo;
}
int main()
{
	n=read();
	for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)s[i][j]=read();
	printf("%d %d",work1(),work2());
	return 0;
}
												
											[GXOI/GZOI2019]与或和的更多相关文章
- 【BZOJ5505】[GXOI/GZOI2019]逼死强迫症(矩阵快速幂)
		
[BZOJ5505][GXOI/GZOI2019]逼死强迫症(矩阵快速幂) 题面 BZOJ 洛谷 题解 如果没有那两个\(1*1\)的东西,答案就是斐波那契数,可以简单的用\(dp\)得到. 大概是设 ...
 - [LOJ3087][GXOI/GZOI2019]旅行者——堆优化dijkstra
		
题目链接: [GXOI/GZOI2019]旅行者 我们考虑每条边的贡献,对每个点求出能到达它的最近的感兴趣的城市(设为$f[i]$,最短距离设为$a[i]$)和它能到达的离它最近的感兴趣的城市(设为$ ...
 - [LOJ3088][GXOI/GZOI2019]旧词——树链剖分+线段树
		
题目链接: [GXOI/GZOI2019]旧词 对于$k=1$的情况,可以参见[LNOI2014]LCA,将询问离线然后从$1$号点开始对这个点到根的路径链修改,每次询问就是对询问点到根路径链查询即可 ...
 - [LOJ3086][GXOI/GZOI2019]逼死强迫症——递推+矩阵乘法
		
题目链接: [GXOI/GZOI2019]逼死强迫症 设$f[i][j]$表示前$i$列有$j$个$1*1$的格子的方案数,那么可以列出递推式子: $f[i][0]=f[i-1][0]+f[i-2][ ...
 - [LOJ3084][GXOI/GZOI2019]宝牌一大堆——DP
		
题目链接: [GXOI/GZOI2019]宝牌一大堆 求最大值容易想到$DP$,但如果将$7$种和牌都考虑进来的话,$DP$状态不好设,我们将比较特殊的七小对和国士无双单独求,其他的进行$DP$. 观 ...
 - P5305 [GXOI/GZOI2019]旧词
		
题目地址:P5305 [GXOI/GZOI2019]旧词 这里是官方题解 \[\sum_{i \leq x}^{}\ depth(lca(i,y))^k\] \(k = 1\) 求的是 \(\sum_ ...
 - P5304 [GXOI/GZOI2019]旅行者
		
题目地址:P5304 [GXOI/GZOI2019]旅行者 这里是官方题解 一个图 \(n\) 点 \(m\) 条边,里面有 \(k\) 个特殊点,问这 \(k\) 个点之间两两最短路的最小值是多少? ...
 - P5303 [GXOI/GZOI2019]逼死强迫症
		
题目地址:P5303 [GXOI/GZOI2019]逼死强迫症 这里是官方题解 初步分析 从题目和数据范围很容易看出来这是一个递推 + 矩阵快速幂,那么主要问题在于递推的过程. 满足条件的答案一定是以 ...
 - P5302 [GXOI/GZOI2019]特技飞行
		
题目地址:P5302 [GXOI/GZOI2019]特技飞行 这里是官方题解(by lydrainbowcat) 题意 给 \(10^5\) 条直线,给 \(x = st\) 和 \(x = ed\) ...
 - P5301 [GXOI/GZOI2019]宝牌一大堆
		
题目地址:P5301 [GXOI/GZOI2019]宝牌一大堆 这里是官方题解(by lydrainbowcat) 部分分 直接搜索可以得到暴力分,因为所有和牌方案一共只有一千万左右,稍微优化一下数据 ...
 
随机推荐
- 让windows10的右键菜单既显示传统cmd又显示powershell
			
在windows10的资源管理器中,按住shift点击右键,只显示 open powershell window here,却没有传统的cmd 解决方法就是修改注册表: HKEY_LOCAL_MACH ...
 - CentOS 7  zabbix添加监控服务器
			
CentOS 7 yum安装zabbix 设置中文界面 安装环境 CentOS 7 关闭防火墙和SElinux 在被监控端安装zabbix-agent [root@zabbix-agent ~]# ...
 - windows下python环境安装
			
虽然是windows下安装的方式,但是linux也差不多哈: 1,首先安装python 这个是菜鸟教程的安装介绍页面,其实很清晰了:http://www.runoob.com/python3/pyth ...
 - 模块cv2的用法
			
一.读入图像 使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数 ...
 - C# 求链表 list 中 属性的 最大值 最小值
			
获取链表List中对象属性最大值最小值(Max,Min)的方法: 1.创建一个类,类中有一个属性A /// <summary> /// 用于测试属性的类 /// </summary& ...
 - IDEA SpringBoot 打包(jar)
			
项目结构: sf-xxx-api sf-xxx-domain sf-xxx-common sf-xxx-web (web模块) 期望输出结果目录 bin/server.sh libs/**.jar,* ...
 - Mac 下 实现终端跳转 服务器 不用输入密码
			
首先需要安装 expect 安装 expect 需要 tcl 依赖 第一步 下载tcl http://www.tcl.tk/software/tcltk/downloadnow84.tml 将下载好 ...
 - deepin Gtk-WARNING **: 无法在模块路径中找到主题引擎:“adwaita”
			
虽然没影响使用,但是看着有点不爽. 执行 sudo apt-get install gnome-themes-standard 就可以了.
 - Java延时器
			
package listener; import java.util.Timer; import java.util.TimerTask; public class Timeer { /** * sc ...
 - HL-D793G七位蓝色+PT6311驱动
			
和之前那块一起买的.又画了这个屏幕驱动,还画了灯丝电源驱动,和以前画的stm8核心板在JLC拼板. 亚光黑颜色,不单独收钱! 切好水洗吹干! 忘记给排针加丝印,手写代之. 焊接的时候,脑子发热,以为把 ...