洛谷.5300.[GXOI/GZOI2019]与或和(单调栈)
想了一个奇葩的单调栈,算的时候要在中间取\(\min\),感觉不靠谱不写了=-=
调了十分钟发现输出没取模=v=
BZOJ好逗逼啊 题面连pdf都不挂了 哈哈哈哈
枚举每一位。在这一位上与之后得到\(1\)的就是全\(1\)子矩形个数。或之后得到\(1\)的就是总举行个数减去全\(0\)子矩形个数。
单调栈算一下就好啦。
维护一个单调递增的栈。如果在右下角统计贡献,每次遇到往上延伸长度\(l\leq sk[top]\)时,会把\(sk[top]\)的一部分截断。用个变量\(sum\)维护前面所有柱子当前的延伸距离即可。
算惹我不说惹 看代码叭= =
//9208kb	7720ms
#include <cstdio>
#include <cctype>
#include <algorithm>
#define mod 1000000007
//#define gc() getchar()
#define MAXIN 500000
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=1005;
int A[N][N];
char IN[MAXIN],*SS=IN,*TT=IN;
inline int read()
{
	int now=0;register char c=gc();
	for(;!isdigit(c);c=gc());
	for(;isdigit(c);now=now*10+c-48,c=gc());
	return now;
}
int Calc(const int n,const int bit,const int equ)
{
	static int sk[N],sz[N],mx[N][N];
	LL ans=0; sk[0]=-1;
	for(int i=1; i<=n; ++i)
	{
		for(int j=1; j<=n; ++j) mx[i][j]=((A[i][j]>>bit&1)==equ)?mx[i-1][j]+1:0;
		LL sum=0;
		for(int j=1,top=0; j<=n; ++j)
		{
			int tot=0;
			while(sk[top]>=mx[i][j]) sum-=sk[top]*sz[top], tot+=sz[top--];
			sk[++top]=mx[i][j], sz[top]=tot+1;
			sum+=sk[top]*sz[top], ans+=sum;
		}
	}
	return ans%mod;
}
int main()
{
	const int n=read(); int mx=0;
	for(int i=1; i<=n; ++i)
		for(int j=1; j<=n; ++j) mx=std::max(mx,A[i][j]=read());
	LL ans1=0,ans2=0,tmp=(1ll*n*(n+1)*n*(n+1)>>2)%mod;
	for(int i=0; 1ll<<i<=mx; ++i) ans1+=(1ll<<i)*Calc(n,i,1)%mod;//1ll<<i<=mx!
	for(int i=0; 1ll<<i<=mx; ++i) ans2+=(1ll<<i)*(tmp+mod-Calc(n,i,0))%mod;
	printf("%lld %lld\n",ans1%mod,ans2%mod);
	return 0;
}
												
											洛谷.5300.[GXOI/GZOI2019]与或和(单调栈)的更多相关文章
- 洛谷P1823 [COI2007] Patrik 音乐会的等待(单调栈+二分查找)
		
洛谷P1823 [COI2007] Patrik 音乐会的等待(单调栈+二分查找) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1333275 这个题不是很 ...
 - 洛谷 P5304 [GXOI/GZOI2019]旅行者(最短路)
		
洛谷:传送门 bzoj:传送门 参考资料: [1]:https://xht37.blog.luogu.org/p5304-gxoigzoi2019-lv-xing-zhe [2]:http://www ...
 - [LOJ3083][GXOI/GZOI2019]与或和——单调栈
		
题目链接: [GXOI/GZOI2019]与或和 既然求的是二进制运算的和,那么我们按位考虑,这样就将矩阵变成了一个$01$矩阵. 对于或运算,就是求有多少个子矩形中有$1$. 直接求不好办,考虑有多 ...
 - [洛谷P1823]音乐会的等待 题解(单调栈)
		
[洛谷P1823]音乐会的等待 Description N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没 ...
 - [洛谷P5304][GXOI/GZOI2019]旅行者
		
题目大意: 有一张 \(n(n\leqslant10^5)\) 个点 \(m(m\leqslant5\times10^5)\) 条边的有向有正权图,有$k(2\leqslant k\leqslant ...
 - 洛谷P4425 转盘 [HNOI/AHOI2018] 线段树+单调栈
		
正解:线段树+单调栈 解题报告: 传送门! 1551又是一道灵巧连题意都麻油看懂的题,,,,所以先解释一下题意好了,,,, 给定一个n元环 可以从0时刻开始从任一位置出发 每次可以选择向前走一步或者在 ...
 - 洛谷 P2947 [USACO09MAR]向右看齐Look Up【单调栈】
		
题目描述 Farmer John's N (1 <= N <= 100,000) cows, conveniently numbered 1..N, are once again stan ...
 - [GXOI/GZOI2019]与或和(单调栈)
		
想了想决定把这几题也随便水个解题报告... bzoj luogu 思路: 首先肯定得拆成二进制30位啊 此后每一位的就是个01矩阵 Q1就是全是1的矩阵个数 Q2就是总矩阵个数减去全是0的矩阵个数 ...
 - 洛谷P1198 [JSOI2008]最大数(线段树/单调栈)
		
题目链接: https://www.luogu.org/problemnew/show/P1198 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询 ...
 
随机推荐
- WebGL&Three.js工作原理
			
一.我们讲什么? 我们讲两个东西:1.WebGL背后的工作原理是什么?2.以Three.js为例,讲述框架在背后扮演什么样的角色? 二.我们为什么要了解原理? 我们假定你对WebGL已经有一定了解,或 ...
 - 在Synology群晖上运行Frp客户端
			
一.Synology群晖上开启SSH 二.使用Putty连接 1,登陆管理员账户和密码 2,连接成功后输入sudo su - 输入管理员的密码切换到root权限 下载:wget https://git ...
 - Charles+iPhone配置ssl证书
			
Charles+iPhone配置ssl证书 一.手机 1. 配置代理 设置->无线局域网->选和电脑同一网络的无线->配置代理->手动 服务器配置电脑的IP,端口设置为8888 ...
 - dubbo基本信息
			
1.Dubbo是什么? Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目. 面试官问你如果这个都不清楚,那下面的就没必要问了. 官网: ...
 - PMI-ACP练习题知识积累-打印版
			
敏捷铁三角的参数:价值,质量,约束.传统的铁三角包括的参数是范围,进度和成本 敏捷计划的三个主要层级为:发布计划,迭代计划,每日计划 敏捷开发模型的特征包括 开发由多个迭代组成. 敏捷拥抱不确定性,而 ...
 - Sql server2012转sql server2008步骤经验总结(转)
			
wIndows用户登入选择“数据库”右键选择“附加”点击“添加” 打开数据库,右键选中 选择“任务”→“生成脚本”→“选择对象”→“编写整个数据及所有数据库对象的脚本” →“下一步” “设置脚本编写选 ...
 - 7个提升Python程序性能的好习惯
			
原文作者:爱coding,会编程的核电工程师. 个人博客地址:zhihu.com/people/zhong-yun-75-63 掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费 ...
 - 【python】面向对象编程之@property、@setter、@getter、@deleter用法
			
@property装饰器作用:把一个方法变成属性调用 使用@property可以实现将类方法转换为只读属性,同时可以自定义setter.getter.deleter方法 @property&@ ...
 - 小程序:动态监测input和取值
			
1.输入框失去焦点取值 wxml: <input bindblur="tab" type='text'></input> js: tab:function( ...
 - java - day003 - 循环嵌套, 循环命名, while, 数组
			
1.循环嵌套 break 中断循环或switch(跳出循环).中断后继续往下执行 continue (跳到循环的下一轮继续执行) return (结束方法) 2.循环命名 内层循环控制外层循环.需要给 ...