「洛谷5300」「GXOI/GZOI2019」与或和【单调栈+二进制转化】
题目链接
题解
按位处理。
把每一位对应的图都处理出来
然后单调栈处理一下就好了。
\(and\)操作处理全\(1\)。
\(or\)操作处理全\(0\)。
代码
#include <bits/stdc++.h>
#define gc getchar
using namespace std;
typedef long long ll;
const int N = 1000 + 4;
const int P = 1e9 + 7;
const int BIT = 31;
int n;
ll ans = 0ll;
ll sum[N][N];
int stk[N];
template <typename T> void read(T &x) {
x = 0; T fl = 1; char c = 0;
for (; c < '0' || c > '9'; c = gc()) if (c == '-') fl = -1;
for (; c >= '0' && c <= '9'; c = gc()) x = (x << 1) + (x << 3) + (c ^ 48);
x *= fl;
}
struct Matrix_BIT {
int a[N][N];
} mat[BIT + 5];
int main() {
cin >> n;
for (int i = 1; i <= n; i ++)
for (int j = 1, x; j <= n; j ++) {
read(x);
for (int k = 0; k <= BIT; k ++) mat[k].a[i][j] = (x >> k) & 1;
}
ans = 0ll;
for (int k = 0; k <= BIT; k ++) {
for (int i = 1; i <= n; i ++)
for (int j = 1; j <= n; j ++)
if (mat[k].a[i][j] == 1) sum[i][j] = sum[i - 1][j] + 1;
else sum[i][j] = 0;
for (int i = 1; i <= n; i ++) {
ll res = 0ll; int top = 0;
for (int j = 1; j <= n; j ++) {
res += sum[i][j];
while (top && sum[i][stk[top]] >= sum[i][j]) {
res -= (stk[top] - stk[top - 1]) * (sum[i][stk[top]] - sum[i][j]);
-- top;
}
ans = (ans + (res << k)) % P;
stk[++ top] = j;
}
}
}
printf("%lld ", ans); ans = 0ll;
for (int k = 0; k <= BIT; k ++) {
for (int i = 1; i <= n; i ++)
for (int j = 1; j <= n; j ++)
if (mat[k].a[i][j] == 0) sum[i][j] = sum[i - 1][j] + 1;
else sum[i][j] = 0;
for (int i = 1; i <= n; i ++) {
ll res = 0; int top = 0;
for (int j = 1; j <= n; j ++) {
res += sum[i][j];
while (top && sum[i][stk[top]] >= sum[i][j]) {
res -= (stk[top] - stk[top - 1]) * (sum[i][stk[top]] - sum[i][j]);
-- top;
}
ans = (ans + ((1ll * i * j - res) << k)) % P;
stk[++ top] = j;
}
}
}
printf("%lld\n", ans);
return 0;
}
「洛谷5300」「GXOI/GZOI2019」与或和【单调栈+二进制转化】的更多相关文章
- 【BZOJ5502】[GXOI/GZOI2019]与或和(单调栈)
[BZOJ5502][GXOI/GZOI2019]与或和(单调栈) 题面 BZOJ 洛谷 题解 看到位运算就直接拆位,于是问题变成了求有多少个全\(0\)子矩阵和有多少个全\(1\)子矩阵. 这两个操 ...
- 洛谷P2866 [USACO06NOV]糟糕的一天Bad Hair Day(单调栈)
题目描述 Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self ...
- 「GXOI / GZOI2019」简要题解
「GXOI / GZOI2019」简要题解 LOJ#3083. 「GXOI / GZOI2019」与或和 https://loj.ac/problem/3083 题意:求一个矩阵的所有子矩阵的与和 和 ...
- LOJ#3083.「GXOI / GZOI2019」与或和_单调栈_拆位
#3083. 「GXOI / GZOI2019」与或和 题目大意 给定一个\(N\times N\)的矩阵,求所有子矩阵的\(AND(\&)\)之和.\(OR(|)\)之和. 数据范围 \(1 ...
- Loj #3085. 「GXOI / GZOI2019」特技飞行
Loj #3085. 「GXOI / GZOI2019」特技飞行 题目描述 公元 \(9012\) 年,Z 市的航空基地计划举行一场特技飞行表演.表演的场地可以看作一个二维平面直角坐标系,其中横坐标代 ...
- 【LOJ】#3088. 「GXOI / GZOI2019」旧词
LOJ#3088. 「GXOI / GZOI2019」旧词 不懂啊5e4感觉有点小 就是离线询问,在每个x上挂上y的询问 然后树剖,每个节点维护轻儿子中已经被加入的点的个数个数乘上\(dep[u]^{ ...
- 【LOJ】#3087. 「GXOI / GZOI2019」旅行者
LOJ#3087. 「GXOI / GZOI2019」旅行者 正着求一遍dij,反着求一遍,然后枚举每条边,从u到v,如果到u最近的点和v能到的最近的点不同,那么可以更新答案 没了 #include ...
- 【LOJ】#3086. 「GXOI / GZOI2019」逼死强迫症
LOJ#3086. 「GXOI / GZOI2019」逼死强迫症 这个就是设状态为\(S,j\)表示轮廓线为\(S\),然后用的1×1个数为j 列出矩阵转移 这样会算重两个边相邻的,只要算出斐波那契数 ...
- 【LOJ】#3085. 「GXOI / GZOI2019」特技飞行
LOJ#3085. 「GXOI / GZOI2019」特技飞行 这显然是两道题,求\(C\)是一个曼哈顿转切比雪夫后的线段树扫描线 求\(AB\),对向交换最大化和擦身而过最大化一定分别为最大值和最小 ...
随机推荐
- 原生js轮盘抽奖实例分析(幸运大转盘抽奖)
效果图: 所需图片素材: 这张图是pointer.png的位置的. turntable-bg.jpg这张是转盘背景图,在背景位置. 这张是turntable.png位置的. 需要这三张图片,如果要实现 ...
- Struts2中五个重要的常量
一.五个常量的位置:位于xwork核心包下的Action字节码文件里 二.五个常量的介绍: a: SUCCESS public static final String SUCCESS = " ...
- spring boot整合mybatis方式二
方式二: pom文件导入maven依赖: <dependency> <groupId>org.springframework.boot</groupId> < ...
- jdbc封装的类
JDBCUtil,java package cn.qst.util; import java.sql.Connection;import java.sql.DriverManager;import j ...
- 设计模式 - 单例模式(Singleton Pattern)
单例模式 介绍 模式:创建型 意图:保证一个类只有一个实例,并提供一个访问它的全局访问点 解决:一个全局使用的类频繁地创建与销毁 场景: 唯一序列号 web中的计数器 I/O与数据库的连接 …… 实现 ...
- ASP.NET Core 部署IIS及 OFFSET 附近有语法错误解决
今天自己开发了一个订机票的微信公众号,功能基本已经完成,然后想部署到服务器实际测试下.结果部署上去出现各种问题.先安装asp.net core模块,然后发现数据库并不像在开发时一样,执行ef的命令行语 ...
- odoo12 物流 自动计算运费 ,采购销售使用不同计量单位自动换算
在物流和食品生鲜类行业,重量是很重要的因素,不仅要处理产品的数量,也要处理产品的重量.在多数行业,重量也是订单的重要数据. odoo原生包含了对重量的处理,下文中将指导如何优雅应用odoo原生模块处理 ...
- 生鲜配送管理系统_升鲜宝供应链系统V2.0 设计思想及主要模块,欢迎大家批评指点。
前言: 经过这几年的开发,升鲜宝生鲜供应链系统管理软件,终于完成C/S与B/S二个版本的开发,先主要介绍B/S版本的功能,C/S版本的功能更加完善. 升鲜宝供应链系统主要由以下几个主要端组成: ...
- python中json文件处理涉及的四个函数json.dumps()和json.loads()、json.dump()和json.load()的区分
一.概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()函数是将一个Python数据类型列表进行js ...
- 考据:internet 和 Web
我们有时大谈互联网发展趋势,有时讨论Web开发:有时说因特网如何,有时又说万维网怎样.但身处其间我们,有时雾里看花,对有些东西一知半解,这里对internet和Web进行一个简单梳理(很多东西缺少可信 ...