题目大意:

1. 求所有的子矩阵的and之和
2. 求所有子矩阵的or之和

由于是位运算,那么久直接拆位,于是就变成了求全0子矩阵的个数和全1子矩阵的个数
那么题目就变成了简单的单调栈问题

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<cstdio>
  5. #include<vector>
  6. #include<queue>
  7. using namespace std;
  8.  
  9. #define re register
  10. #define ll long long
  11. #define gc getchar()
  12. inline int read()
  13. {
  14. re int x(0),f(1);re char c(gc);
  15. while(c>'9'||c<'0')f=c=='-'?-1:1,c=gc;
  16. while(c>='0'&&c<='9')x=x*10+c-48,c=gc;
  17. return f*x;
  18. }
  19.  
  20. const int N=1010,mod=1e9+7;
  21. int n,a[N][N],h[N][N],top,s[N];
  22. ll ans;
  23.  
  24. int main()
  25. {
  26. n=read();
  27. for(int i=1;i<=n;++i)
  28. for(int j=1;j<=n;++j)
  29. a[i][j]=read();
  30. for(int k=0;k<=31;++k)
  31. {
  32. for(int i=1;i<=n;++i)
  33. for(int j=1;j<=n;++j)
  34. {
  35. if((a[i][j]>>k)&1)
  36. h[i][j]=h[i-1][j]+1;
  37. else
  38. h[i][j]=0;
  39. }
  40. for(int i=1;i<=n;++i)
  41. {
  42. ll an(0);top=0;
  43. for(int j=1;j<=n;++j)
  44. {
  45. an+=h[i][j];
  46. while(top&&h[i][s[top]]>=h[i][j])
  47. an-=(s[top]-s[top-1])*(h[i][s[top--]]-h[i][j]);
  48. ans+=an<<k;
  49. ans%=mod;
  50. s[++top]=j;
  51. }
  52. }
  53. }
  54. cout<<ans<<" ";
  55. ans=0,top=0;
  56. memset(s,0,sizeof(s));
  57. for(int k=0;k<=31;++k)
  58. {
  59. for(int i=1;i<=n;++i)
  60. for(int j=1;j<=n;++j)
  61. {
  62. if((a[i][j]>>k)&1)
  63. h[i][j]=0;
  64. else
  65. h[i][j]=h[i-1][j]+1;
  66. }
  67. for(int i=1;i<=n;++i)
  68. {
  69. ll an(0);top=0;
  70. for(int j=1;j<=n;++j)
  71. {
  72. an+=h[i][j];
  73. while(top&&h[i][s[top]]>=h[i][j])
  74. an-=(s[top]-s[top-1])*(h[i][s[top--]]-h[i][j]);
  75. ans+=(1LL*i*j-an)<<k;
  76. ans%=mod;
  77. s[++top]=j;
  78. }
  79. }
  80. }
  81. cout<<ans<<" ";
  82. return 0;
  83. }

  

题解:YNOI/GZOI2019 与或和的更多相关文章

  1. 题解:[GXOI/GZOI2019]与或和

    开始完全没思路 在洛谷看到样例一,突发奇想,决定先做一下元素只有0/1的情况 发现子任务1是全1子矩阵 子任务2是总子矩阵个数减去全0子矩阵 发现全0/1矩阵可以构造单调栈解决.具体做法:前缀和求出每 ...

  2. 题解-GXOI/GZOI2019 特技飞行

    Problem loj3085 bzoj不放题面差评 题意概要:给出两条竖直直线,再给出 \(n\) 架飞机的初始航线:一条接通这两条直线的线段,保证航线交点不在两条直线上.现要求安排所有飞机在航线相 ...

  3. GXOI/GZOI2019题解

    GXOI/GZOI2019题解 P5300 [GXOI/GZOI2019]与或和 一眼题.. 显然枚举每个二进制位,答案就变成了全1子矩阵数量. 这个xjb推推,单调栈一下就行了. #include& ...

  4. 「GXOI / GZOI2019」简要题解

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

  5. 洛谷P5309 Ynoi 2011 初始化 题解

    题面. 我也想过根号分治,但是题目刷得少,数组不敢开,所以还是看题解做的. 这道题目要用到根号分治的思想,可以看看这道题目和我的题解. 题目要求处理一个数组a,支持如下操作. 对一个整数x,对数组长度 ...

  6. 题解 P5301 【[GXOI/GZOI2019]宝牌一大堆】

    这道题除了非常恶心以外也没有什么非常让人恶心的地方 当然一定要说有的话还是有的,就是这题和咱 ZJOI 的 mahjong 真的是好像的说~ 于是就想说这道题出题人应该被 锕 掉 noteskey 整 ...

  7. 【题解】Luogu P5301 [GXOI/GZOI2019]宝牌一大堆

    原题传送门 首先先要学会麻将,然后会发现就是一个暴力dp,分三种情况考虑: 1.非七对子国士无双,设\(dp_{i,j,k,a,b}\)表示看到了第\(i\)种牌,一共有\(j\)个\(i-1\)开头 ...

  8. 【题解】Luogu P5300 [GXOI/GZOI2019]与或和

    原题传送门 我们珂以拆位,拆成一个个0/1矩阵 贡献珂以用全0,全1的子矩阵的个数来计算 全0,全1的子矩阵的个数珂以用悬线法/单调栈解决 #include <bits/stdc++.h> ...

  9. 【题解】Luogu P5304 [GXOI/GZOI2019]旅行者

    原题传送门 题意:给你k个点,让你求两两最短路之间的最小值 我们考虑二进制拆分,使得每两个点都有机会分在不同的组\((A:0,B:1)\)中,从源点\(S\)向\(A/B\)中的点连边权为0的边,从\ ...

随机推荐

  1. 玩玩小程序:使用 WebApi 交互打造原生的微信小程序 - 图灵小书架

    使用 WebApi 交互打造原生的微信小程序 - 图灵小书架 目录 介绍 源码地址 扫一扫体验 代码分析 其它相关信息(互联网搜集) 介绍 定时抓取图灵社区官网的首页.最热.推荐和最新等栏目的相关图书 ...

  2. Memcache的 简介

    MemCache memcache是一套分布式的高速缓存系统.目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的.需要频繁访问数据库的网站访问速度提升效果十分显著,是一套开放源代码软件. 工作 ...

  3. Dubbo和Spring Cloud微服务架构'

    微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...

  4. [转]当CPU飙高时,它在做什么

    在开发过程中,有时候我们发现JVM占用的CPU居高不下,跟我们的预期不符,这时,CPU在做什么呢?是什么线程让CPU如此忙碌呢?我们通过如下几步,可以查看CPU在执行什么线程. 1.查找jvm进程ID ...

  5. python的学习笔记01_3 基本运算符 流程控制if while 字符串常用办法

    基本运算符 运算符 计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算.比较运算.逻辑运算.赋值运算.成员运算.身份运算.位运算,今天我们暂只学习算数运算.比较运算.逻辑运 ...

  6. arcgis api for js入门开发系列十九图层在线编辑

    本篇主要讲述的是利用arcgis api实现图层在线编辑功能模块,效果图如下: 实现思路: 1.arcgis server发布的FeatureServer服务提供的图层在线编辑能力: 2.实现的在线编 ...

  7. Linux常用查找命令

    第一种:grep命令 示例: 第二种:find命令 示例: 第三种:locate命令 示例: 第四种:whereis命令 示例: 第五种:which命令 示例:

  8. [算法&数据结构]深度优先搜索(Depth First Search)

    深度优先 搜索(DFS, Depth First Search) 从一个顶点v出发,首先将v标记为已遍历的顶点,然后选择一个邻接于v的尚未遍历的顶点u,如果u不存在,本次搜素终止.如果u存在,那么从u ...

  9. DbGridEh根据某一个字段的值显示对应底色或字体变化

    改变行底色: procedure TForm1.dggrideh1DrawColumnCell(Sender: TObject;const Rect: TRect; DataCol: Integer; ...

  10. SQL Server数据库漏洞评估了解一下

    SQL Server Management Studio 17.4或更高版本的SSMS中提供了SQL Server漏洞侦测(VA)功能,此功能允许SQL Server扫描您的数据库以查找潜在的安全漏洞 ...