[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\) 子矩阵均有贡献 如果求一 ...
随机推荐
- 【136】Cydia相关插件及配置
插件推荐: iFile:进行文件管理! Music2iPod:同步音乐到iPod内部! LabelEnhance:标签颜色修改! Bridge:貌似功能强大,与Music2iPod类似! Activa ...
- linux上用mplayer播放264文件
Linux上,264视频裸码流可用mplayer进行播放. 同时,可用-fps参数控制帧率. 参考:http://www.chinavideo.org/archiver/?tid-16088.html
- PHP命名空间namespace使用小结
1.介绍一下php的命名空间 什么是命名空间?从广义上来说,命名空间是一种封装事物的方法.在很多地方都可以见到这种抽象概念.例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命 ...
- SQL标量函数-日期函数
select day(createtime) from life_unite_product --取时间字段的天值 select month(createtime) from life_uni ...
- 技术杂记之:vi使用入门
对于Linux的初次使用者来说,进入Linux非图形界面后,不知道怎么创建文本(甚至于在图形界面,也找不到创建文本的菜单).其实,每一个Linux的发行版本,都包含了一个最简单.也是最基础的文本编辑器 ...
- mysql 忘记密码 登陆+修改密码
step1: 苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务(点击stop mysql server) step2: 进入终端输入:cd /usr/local ...
- 04全志R58平台编译内核需要选择的配置
04全志R58平台编译内核需要选择的配置 2018/11/6 14:19 版本:V1.0 开发板:SC5806 1.系统编译:(略) 每次系统编译/内核的时候都需要选3次N: * * Xtables ...
- Android开发中使用startActivityForResult()方法从Activity A跳转Activity B出现B退出时A也同时退出的解决办法
最近一个 App 中用到了 startActivityForResult() 方法,使用的时候却出现了一些问题,比如我在 Activity A 中调用该方法向 Activity B 中跳转,如果 B ...
- windows 安装绿色版mysql
(1)到官网下载绿色版mysql:http://dev.mysql.com/downloads/mysql/ (2)下载好后,放在F:\mysql,解压出来 (3)进入到mysql-5.6.19-wi ...
- this常用的用法
1.函数作为对象的方法时,this指的是该对象: var obj ={ name:"bob", age:25, getName:function(){ console.log(th ...