题目链接

【洛谷传送门】

题解

按位处理。
把每一位对应的图都处理出来
然后单调栈处理一下就好了。
\(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」与或和【单调栈+二进制转化】的更多相关文章

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

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

  2. 洛谷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 ...

  3. 「GXOI / GZOI2019」简要题解

    「GXOI / GZOI2019」简要题解 LOJ#3083. 「GXOI / GZOI2019」与或和 https://loj.ac/problem/3083 题意:求一个矩阵的所有子矩阵的与和 和 ...

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

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

  5. Loj #3085. 「GXOI / GZOI2019」特技飞行

    Loj #3085. 「GXOI / GZOI2019」特技飞行 题目描述 公元 \(9012\) 年,Z 市的航空基地计划举行一场特技飞行表演.表演的场地可以看作一个二维平面直角坐标系,其中横坐标代 ...

  6. 【LOJ】#3088. 「GXOI / GZOI2019」旧词

    LOJ#3088. 「GXOI / GZOI2019」旧词 不懂啊5e4感觉有点小 就是离线询问,在每个x上挂上y的询问 然后树剖,每个节点维护轻儿子中已经被加入的点的个数个数乘上\(dep[u]^{ ...

  7. 【LOJ】#3087. 「GXOI / GZOI2019」旅行者

    LOJ#3087. 「GXOI / GZOI2019」旅行者 正着求一遍dij,反着求一遍,然后枚举每条边,从u到v,如果到u最近的点和v能到的最近的点不同,那么可以更新答案 没了 #include ...

  8. 【LOJ】#3086. 「GXOI / GZOI2019」逼死强迫症

    LOJ#3086. 「GXOI / GZOI2019」逼死强迫症 这个就是设状态为\(S,j\)表示轮廓线为\(S\),然后用的1×1个数为j 列出矩阵转移 这样会算重两个边相邻的,只要算出斐波那契数 ...

  9. 【LOJ】#3085. 「GXOI / GZOI2019」特技飞行

    LOJ#3085. 「GXOI / GZOI2019」特技飞行 这显然是两道题,求\(C\)是一个曼哈顿转切比雪夫后的线段树扫描线 求\(AB\),对向交换最大化和擦身而过最大化一定分别为最大值和最小 ...

随机推荐

  1. WPF ResourceDictionary 主题资源替换(一)

    当我们需要在程序中替换主题,更换另一套背景.颜色.样式时,如何在不修改资源Key值,直接替换呢? 问题&疑问 1. Key值冲突 同一ResourceDictionary中,不可以使用相同Ke ...

  2. DRDS分布式SQL引擎—执行计划介绍

    摘要: 本文着重介绍 DRDS 执行计划中各个操作符的含义,以便用户通过查询计划了解 SQL 执行流程,从而有针对性的调优 SQL. DRDS分布式SQL引擎 — 执行计划介绍 前言 数据库系统中,执 ...

  3. HashMap源码分析 JDK1.8

    本文按以下顺序叙述: HashMap的感性认识. 官方文档中对HashMap介绍的解读. 到源码中看看HashMap这些特性到底是如何实现的. 把源码啃下来有一种很爽的感觉, 相信你读完后也能体会到~ ...

  4. CSS3制作上下跳动动画箭头效果

    动画效果如下: 代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8&q ...

  5. Mybatis实现部门表增删改查以及排序

    废话不说,直接开门见山! 需要在WebContent下的lib下导入两个包 mybatis-3.2.5.jar ojdbc6.jar package com.xdl.entity; import ja ...

  6. python在sqlite动态创建表源码

    代码之余,将开发过程中经常用的代码片段备份一下,如下的代码是关于python在sqlite动态创建表的代码,应该能对各位有所用. import sqlite3 as db conn = db.conn ...

  7. 盖洛普Q12在团队中的应用

    周五给大家做了个盖洛普Q12的分享.   分享前做了调查问卷.除了盖洛普Q12的12个问题: 1.我知道公司对我的工作要求吗? 2.我有做好我的工作所需要的材料和设备吗? 3.在工作中,我每天都有机会 ...

  8. row_number() over()分页查询

    1.首先讲下row_number() over() 是干什么的? 是一个分析函数,会在数据表生成一个排序列. 案例SQL: select ROW_NUMBER() over(order by book ...

  9. win10下Resin安装--入门(1)

     我个人采用是解压版的,直接解压亦可使用下载地址 开启该服务需要的环境:首先你的JDK必须安装成功 解压后你会看到 当我们运行程序时,需要修改配置文件中的相关配置: 1.端口:以免端口被占用 2.相应 ...

  10. 多租户通用权限设计(基于casbin)

    多租户通用权限设计(基于 casbin) 所谓权限控制, 概念并不复杂, 就是确认某个操作是否能做, 本质上仅仅就是个bool判断. 权限几乎是每个系统必不可少的功能, 和具体业务结合之后, 在系统中 ...