题目链接:点击查看

题目大意:给出一个 n∗mn*mn∗m 的矩阵,求所有子矩阵的“按位与和”和“按位或和”

题目分析:通过样例一的提示,不难想到拆位之后原矩阵会变成 010101 矩阵。对于“按位与”来说,一个子矩阵有贡献当且仅当子矩阵中全为 111 ,而同理,对于“按位或”来说,一个子矩阵没贡献当且仅当子矩阵中全为 000。所以我们的问题转换为了,如何求解 010101 矩阵中,全 000 或全 111 子矩阵的个数

去年遇到的一个模型,放到今年就不会了,反向训练第一人:牛客 - Animal Protection

固定某个端点后,不难发现子矩阵的个数实际上就是可行的面积,单调栈维护一下可行矩阵面积就可以了

子矩阵的个数会爆 intintint ,注意取模

代码:

// Problem: C - 与或和
// Contest: Virtual Judge - 7.30限时训练(最小生成树,树的直径,单调栈)1
// URL: https://vjudge.net/contest/450213#problem/C
// Memory Limit: 524 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)// #pragma GCC optimize(2)
// #pragma GCC optimize("Ofast","inline","-ffast-math")
// #pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#include<list>
#include<unordered_map>
#define lowbit(x) (x&-x)
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
template<typename T>
inline void read(T &x)
{T f=1;x=0;char ch=getchar();while(0==isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(0!=isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();x*=f;
}
template<typename T>
inline void write(T x)
{if(x<0){x=~(x-1);putchar('-');}if(x>9)write(x/10);putchar(x%10+'0');
}
const int inf=0x3f3f3f3f;
const int N=1e3+100;
const int mod=1e9+7;
int maze[N][N],dp[N][N],n;
LL solve(int d,int id) {for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++) {if(((maze[i][j]>>d)&1)!=id) {dp[i][j]=0;} else {dp[i][j]=dp[i-1][j]+1;}}}LL ans=0;for(int i=1;i<=n;i++) {stack<int>st;st.push(0);LL sum=0;for(int j=1;j<=n;j++) {while(st.size()&&dp[i][st.top()]>dp[i][j]) {int pre=st.top();st.pop();sum-=(pre-st.top())*dp[i][pre];}sum+=(j-st.top())*dp[i][j];ans+=sum;st.push(j);}}return ans;
}
int main()
{#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);LL sum=0;read(n);for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++) {read(maze[i][j]);sum+=i*j;}}LL ans1=0,ans2=0;for(int i=0;i<=30;i++) {ans1=(ans1+solve(i,1)%mod*(1<<i))%mod;ans2=(ans2+(sum-solve(i,0))%mod*(1<<i))%mod;}cout<<ans1<<' '<<ans2<<endl;return 0;
}

LibreOJ - 3083 与或和(单调栈+位运算)相关推荐

  1. 402. 移掉K位数字(单调栈)

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: nu ...

  2. LeetCode 402. 移掉K位数字(贪心,单调栈)

    1. 题目 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : ...

  3. leetcode 402. Remove K Digits | 402. 移掉 K 位数字(单调栈)

    题目 https://leetcode.com/problems/remove-k-digits/ 题解 本题考察对问题的抽象能力,多写几个例子可以发现,这是一个单调栈问题,维护一个单调不减栈. cl ...

  4. 【单调栈 前缀和 异或】7.21序列求和

    还要再细细思考的奇妙思路 题目描述 小A最近喜欢上了关于区间max的问题.她定义一个区间的价值是max(ai)(l<=i<=r)∗(alxoral+1xor...xorar)max(ai) ...

  5. 音乐会的等待-单调栈

    关于本题,这里只是基础的写法,完美的避开了特殊情况,另一篇博文会详细讲解特殊情况 [COI2007] Patrik 音乐会的等待 题目描述 N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转 ...

  6. hdu 1506(dp || 单调栈)

    题意:这题是要找最大的矩形面积. 解题思路:这题的关键是要找每个条形能够往左和往右能够到达的最大长度.我最开始的思路是单调栈去维护,只要入栈的元素比栈顶元素小,栈顶就要出栈,并且知道其最右能够到达的最 ...

  7. BZOJ-1057: [ZJOI2007]棋盘制作(单调栈)

    1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 3096  Solved: 1567 [Submit][St ...

  8. [蓝桥杯][算法训练VIP]旅行家的预算(单调栈+贪心)

    题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市 到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P ...

  9. 【HNOI2016】序列【莫队】【单调栈】【ST表】

    题意:给定序列 aia_iai​,qqq 次询问 [l,r][l,r][l,r] 所有子区间最小值之和. n,q≤105n,q\leq 10^5n,q≤105 这种题一眼看上去是离线线段树,但这题每移 ...

最新文章

  1. pythonclass全局变量_Python-多处理全局变量更新未返回给父级
  2. component是什么接口_【Android每日一题】从Activity创建到View呈现中间发生了什么?...
  3. ADO.NET 快速入门(四):从数据库填充 DataSet
  4. DIV与Table布局在大型网站的可用性比较
  5. R-3.1.1 编译安装2
  6. ASP.NET代码优化浅析
  7. 基于Spark的Als算法+自迭代+Spark2.0新写法
  8. kubernetes——pod和docker容器的关系
  9. 黑莓Torch 9800,了无新意落后主流机型
  10. java 复制标记_java-对于大文件,在标记inputStream并将其重置...
  11. 基数排序(稍微困难)
  12. 生成CFree 5.0 注册码
  13. 内存颗粒和闪存颗粒的区别_闪存颗粒与内存颗粒的不同
  14. 你知道什么是大数据的核心吗?
  15. uefi开发环境搭建
  16. 面向对象,面向对象的优点
  17. SqlCommand对象-ExecuteNonQuery()方法的使用
  18. 赵成的运维体系管理课视频教程
  19. LabVIEW视觉开发必备软件VAS、VDM、VBAI以及基于VDM的圆形
  20. 神舟十二号航天员名单确定,3名航天员本次上天将完成这些任务

热门文章

  1. 再探ChannelPipeline 的初始化
  2. ArrayBlockingQueue原理分析-remove方法
  3. Lambda表达式练习2【应用】
  4. 关于Spring容器管理Bean的过程以及加载模式
  5. 自定义线程池-线程池工作流程介绍
  6. SpringSecurity认证流程回顾
  7. 新增房源服务实现之AutoGenerator使用以及创建pojo对象
  8. XMLIOC案例-编写spring的Ioc配置
  9. 常用IOC注解按照作用分类
  10. Response_案例3_输出字节数据