[GXOI/GZOI2019]与或和(单调栈)
想了想决定把这几题也随便水个解题报告...
思路:
首先肯定得拆成二进制30位啊
此后每一位的就是个01矩阵
Q1就是全是1的矩阵个数
Q2就是总矩阵个数减去全是0的矩阵个数
玉蟾宫警告
就是单调栈乱搞对吧
本题完结
事实上有了思路其他的都是多余的对吧所以就不要介意代码了
#include<cstdio>
#define mo 1000000007
;
template<typename tp>inline void read(tp &tar)
{
tp ret=,f=;char ch=getchar();
;ch=getchar();}
+ch-';ch=getchar();}
tar=ret*f;
}
int n,ai[N][N],a1[N][N],a0[N][N];
int ans1,ans0;
int sta1[N],sta0[N];
int main()
{
read(n);
;i<=n;i++)
{
;j<=n;j++)
{
read(ai[i][j]);
}
}
,o=;k<;k++,o<<=)
{
;i<=n;i++)
{
;j<=n;j++)
{
if(ai[i][j]&o)
a1[i][j]=a1[i-][j]+,a0[i][j]=;
else
a0[i][j]=a0[i-][j]+,a1[i][j]=;
}
}
;i<=n;i++)
{
,hop0=,tmp1=,tmp0=;
;j<=n;j++)
{
tmp1+=a1[i][j];
while(hop1&&a1[i][j]<a1[i][sta1[hop1]])
{
tmp1+=(sta1[hop1]-sta1[hop1-])*(a1[i][j]-a1[i][sta1[hop1]]);
hop1--;
}
ans1=(ans1+((1ll*tmp1)<<k)%mo)%mo;
sta1[++hop1]=j;
tmp0+=a0[i][j];
while(hop0&&a0[i][j]<a0[i][sta0[hop0]])
{
tmp0+=(sta0[hop0]-sta0[hop0-])*(a0[i][j]-a0[i][sta0[hop0]]);
hop0--;
}
ans0=(ans0+((1ll*(i*j-tmp0))<<k)%mo)%mo;
sta0[++hop0]=j;
}
}
}
printf("%d %d\n",ans1,ans0);
;
}
我又被卡常了啊啊啊
[GXOI/GZOI2019]与或和(单调栈)的更多相关文章
- [LOJ3083][GXOI/GZOI2019]与或和——单调栈
题目链接: [GXOI/GZOI2019]与或和 既然求的是二进制运算的和,那么我们按位考虑,这样就将矩阵变成了一个$01$矩阵. 对于或运算,就是求有多少个子矩形中有$1$. 直接求不好办,考虑有多 ...
- 洛谷.5300.[GXOI/GZOI2019]与或和(单调栈)
LOJ BZOJ 洛谷 想了一个奇葩的单调栈,算的时候要在中间取\(\min\),感觉不靠谱不写了=-= 调了十分钟发现输出没取模=v= BZOJ好逗逼啊 题面连pdf都不挂了 哈哈哈哈 枚举每一位. ...
- 【BZOJ5502】[GXOI/GZOI2019]与或和(单调栈)
[BZOJ5502][GXOI/GZOI2019]与或和(单调栈) 题面 BZOJ 洛谷 题解 看到位运算就直接拆位,于是问题变成了求有多少个全\(0\)子矩阵和有多少个全\(1\)子矩阵. 这两个操 ...
- LOJ#3083.「GXOI / GZOI2019」与或和_单调栈_拆位
#3083. 「GXOI / GZOI2019」与或和 题目大意 给定一个\(N\times N\)的矩阵,求所有子矩阵的\(AND(\&)\)之和.\(OR(|)\)之和. 数据范围 \(1 ...
- 「洛谷5300」「GXOI/GZOI2019」与或和【单调栈+二进制转化】
题目链接 [洛谷传送门] 题解 按位处理. 把每一位对应的图都处理出来 然后单调栈处理一下就好了. \(and\)操作处理全\(1\). \(or\)操作处理全\(0\). 代码 #include & ...
- LOJ#3083. 「GXOI / GZOI2019」与或和(单调栈)
题面 传送门 题解 按位考虑贡献,如果\(mp[i][j]\)这一位为\(1\)就设为\(1\)否则设为\(0\),对\(or\)的贡献就是全为\(1\)的子矩阵个数,对\(and\)的贡献就是总矩阵 ...
- [GXOI/GZOI2019]与或和(位运算,单调栈)
题目链接懒得放了. 题目大意懒得写了. 省选原题哪有找不到的…… 说实话,其实这题是个大水题,被我十秒钟内口胡出来了. 首先位运算除了拆位还能干啥?以下以与为例,或是差不多的. 我们考虑有多少个子矩阵 ...
- [GX/GZOI2019]与或和(单调栈+按位运算)
首先看到与或,很显然想到按照位拆分运算.然后就变成了0/1矩阵,要使矩阵在当前位与为1,则矩阵全为1,如果是或为1,则是矩阵不全为0,然后求全为0/1的矩阵个数即可.记录c[i][j]表示以a[i][ ...
- P5300 [GXOI/GZOI2019]与或和
题目地址:P5300 [GXOI/GZOI2019]与或和 考虑按位计算贡献 对于 AND 运算,只有全 \(1\) 子矩阵才会有贡献 对于 OR 运算,所以非全 \(0\) 子矩阵均有贡献 如果求一 ...
随机推荐
- 【413】C 语言 Command line
Command-Line Arguments All the executable programs above have a main(void) program more generally, e ...
- Entity Framework 学习整理
MSDN: http://msdn.microsoft.com/en-us/data/aa937723 台湾博客: http://www.dotblogs.com.tw/yc421206/ http: ...
- Java位运算(移位,位与,或,异或,非)
1.左移( << ) // 0000 0000 0000 0000 0000 0000 0000 0101 然后左移2位后,低位补0:// // 0000 0000 0000 0000 0 ...
- HDU3949:XOR(高斯消元)(线性基)
传送门 题意 给出n个数,任意个数任意数异或构成一个集合,询问第k大个数 分析 这题需要用到线性基,下面是一些资料 1.高斯消元&线性基&Matirx_Tree定理 笔记 2.关于线性 ...
- bzoj 1607: [Usaco2008 Dec]Patting Heads 轻拍牛头【瞎搞】
某种意义上真毒瘤?我没看懂题啊...于是看了题解 就是筛约数的那种方法,复杂度调和级数保证O(nlogn) 所以这题啥意思啊 #include<iostream> #include< ...
- codeforces 28D(dp)
D. Don't fear, DravDe is kind time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- SQL Server OPENQUERY使用
以下以创建好的ORAC链接服务器为例: A. 执行 SELECT 传递查询 SELECT * FROM OPENQUERY(ORAC, 'SELECT ID,NAME FROM SCOTT.RYB') ...
- 大数据技术之_25_手机APP信息统计系统项目_01_APP 数据生成模块 + 数据收集模块 + 数据处理模块框架搭建 + 业务需求处理 + 数据展示模块 +项目总结 + 问题总结
一 项目概述1.1 角色1.2 业务术语1.3 项目效果展示二 项目需求三 项目概要3.1 项目技术架构3.2 项目目录结构3.3 项目技术选型3.4 项目整体集群规划3.5 创建项目工程四 APP ...
- [USACO 2012 Mar Silver] Landscaping【Edit Distance】
传送门:http://www.usaco.org/index.php?page=viewproblem2&cpid=126 好题啊好题,一开始就输给了这道题的想法! 先把原始状态以及目标状态换 ...
- poj3368 Frequent values
思路: 转化为RMQ. 实现: #include <cstdio> #include <cstring> #include <algorithm> using na ...