2020牛客暑期多校训练营(第二场)Fake Maxpooling
传送门:Fake Maxpooling
题意:给出矩阵的行数n和列数m,矩阵 Aij = lcm( i , j ) ,求每个大小为k*k的子矩阵的最大值的和。
题解:如果暴力求解肯定会t,所以要智取。前几天刷蓝书的时候看到这种求区间最值的可以用单调队列,这个题就是用单调队列求解。先横着算一下每个长度为k的区间的最大值记录下来,然后再把记录下来的数组竖着同样算一下,最后求和。求最小公倍数的时候,不能用__gcd(),会 t 的。这个题的矩阵不会超long long ,所以用 int 就好了,不然会超内存。(血泪史
至于单调队列是什么,可以看看这个,在acwing写题的时候看到的。https://www.acwing.com/blog/content/150/
代码:
1 #include<bits/stdc++.h>
2 #define ll long long
3 using namespace std;
4 int a[5100][5100],b[5100][5100];
5 deque<int>q;
6 inline int gcd(int a,int b){
7 return b==0?a:gcd(b,a%b);
8 }
9 int main()
10 {
11 ios::sync_with_stdio(false);
12 cin.tie(0);
13 cout.tie(0);
14 int n,m,k;
15 cin>>n>>m>>k;
16 for(int i=1;i<=n;i++){
17 for(int j=1;j<=m;j++){
18 a[i][j]=i*j/gcd(i,j);
19 }
20 }
21 for(int i=1;i<=n;i++){
22 while(!q.empty()) q.pop_back();
23 q.push_back(0);
24 for(int j=1;j<k;j++){
25 while(q.size()&&a[i][q.back()]<=a[i][j]) q.pop_back();
26 q.push_back(j);
27 }
28 for(int j=k;j<=m;j++){
29 while(q.size()&&q.front()<=j-k) q.pop_front(); //因为下边是先插入j再记录,所以一定要是<= 不然会多一个数,wa死了
30 while(q.size()&&a[i][q.back()]<=a[i][j]) q.pop_back();
31 q.push_back(j);
32 b[i][j]=max(b[i][j],a[i][q.front()]);
33 }
34 }
35 ll ans=0;
36 for(int j=k;j<=m;j++){
37 while(!q.empty()) q.pop_back();
38 q.push_back(0);
39 for(int i=1;i<k;i++){
40 while(q.size()&&b[q.back()][j]<=b[i][j]) q.pop_back();
41 q.push_back(i);
42 }
43 for(int i=k;i<=n;i++){
44 while(q.size()&&q.front()<=i-k) q.pop_front();
45 while(q.size()&&b[q.back()][j]<=b[i][j]) q.pop_back();
46 q.push_back(i);
47 ans+=b[q.front()][j];
48 }
49 }
50 cout<<ans<<endl;
51 return 0;
52 }
2020牛客暑期多校训练营(第二场)Fake Maxpooling的更多相关文章
- 2020牛客暑期多校训练营 第二场 K Keyboard Free 积分 期望 数学
LINK:Keyboard Free 我要是会正经的做法 就有鬼了. 我的数学水平没那么高. 三个同心圆 三个动点 求围成三角形面积的期望. 不会告辞. 其实可以\(n^2\)枚举角度然后算出面积 近 ...
- 2020牛客暑期多校训练营 第二场 J Just Shuffle 置换 群论
LINK:Just Shuffle 比较怂群论 因为没怎么学过 置换也是刚理解. 这道题是 已知一个置换\(A\)求一个置换P 两个置换的关键为\(P^k=A\) 且k是一个大质数. 做法是李指导教我 ...
- 2020牛客暑期多校训练营 第二场 I Interval 最大流 最小割 平面图对偶图转最短路
LINK:Interval 赛时连题目都没看. 观察n的范围不大不小 而且建图明显 考虑跑最大流最小割. 图有点稠密dinic不太行. 一个常见的trick就是对偶图转最短路. 建图有点复杂 不过建完 ...
- 2020牛客暑期多校训练营 第二场 C Cover the Tree 构造 贪心
LINK:Cover the Tree 最受挫的是这道题,以为很简单 当时什么都想不清楚. 先胡了一个树的直径乱搞的贪心 一直过不去.后来意识到这类似于最经典长链剖分优化贪心的做法 然后那个是求最大值 ...
- 2020牛客暑期多校训练营 第二场 B Boundary 计算几何 圆 已知三点求圆心
LINK:Boundary 计算几何确实是弱项 因为好多东西都不太会求 没有到很精通的地步. 做法很多,先说官方题解 其实就是枚举一个点 P 然后可以发现 再枚举一个点 然后再判断有多少个点在圆上显然 ...
- 2020牛客暑期多校训练营 第二场 A All with Pairs 字符串hash KMP
LINK:All with Pairs 那天下午打这个东西的时候状态极差 推这个东西都推了1个多小时 (比赛是中午考试的我很困 没睡觉直接开肝果然不爽 一开始看错匹配的位置了 以为是\(1-l\)和\ ...
- 2019牛客暑期多校训练营(第二场) H-Second Large Rectangle(单调栈)
题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 ...
- 2020牛客暑假多校训练营 第二场 H Happy Triangle set 线段树 分类讨论
LINK:Happy Triangle 这道题很容易. 容易想到 a+b<x a<x<b x<a<b 其中等于的情况在第一个和第三个之中判一下即可. 前面两个容易想到se ...
- 2020牛客暑假多校训练营 第二场 G Greater and Greater bitset
LINK:Greater and Greater 确实没能想到做法. 考虑利用bitset解决问题. 做法是:逐位判断每一位是否合法 第一位 就是 bitset上所有大于\(b_1\)的位置 置为1. ...
- 2020牛客暑假多校训练营 第二场 E Exclusive OR FWT
LINK:Exclusive OR 没做出 原因前面几篇说过了. 根据线性基的知识容易推出 不超过\(w=log Mx\)个数字即可拼出最大值 其中Mx为值域. 那么考虑w+2个数字显然也为最大值.. ...
随机推荐
- 2021年了,`IEnumerator`、`IEnumerable`还傻傻分不清楚?
IEnumerator.IEnumerable这两个接口单词相近.含义相关,傻傻分不清楚. 入行多年,一直没有系统性梳理这对李逵李鬼. 最近本人在怼着why神的<其实吧,LRU也就那么回事> ...
- docker 报错: Cannot connect to the Docker daemon at unix:///var/run/docker.sock.
最近在 Windows 子系统 WSL 上面安装了一个 ubuntu18.04, 安装完docker 跑 hello-world 的时候报错了 docker: Cannot connect to th ...
- 使用memory_profiler异常
在使用memory_profiler模块0.55.0版本执行命令诊断程序内存用量时,遇到下面错误: C:\Users\Chen\Desktop\python_doc\第四模块课件>python ...
- 使用CDN访问免备案网站
如何使用CDN绕过服务器域名备案 前言 不得不说,大陆需要备案,时间真的有点长,至少得5天~20天起步,对于我们这些火急火燎的站长还是比较难受的.这里教大家如何使用cdn绕过备案, 访问速度很快,亲测 ...
- kafka(三)原理剖析
一.生产者消息分区机制原理剖析 在使用Kafka 生产和消费消息的时候,肯定是希望能够将数据均匀地分配到所有服务器上.比如很多公司使用 Kafka 收集应用服务器的日志数据,这种数据都是很多的,特别是 ...
- mysql(视图 事务 索引 外键)
视图 视图本质就是对查询的封装 创建视图(定义视图 起名以v_开头) create view v_students as select classes.name as c_name ,stud ...
- Frame of Reference and Roaring Bitmaps
https://www.elastic.co/cn/blog/frame-of-reference-and-roaring-bitmaps http://roaringbitmap.org/ 2015 ...
- 深度漫谈数据系统架构——Lambda architecture
https://mp.weixin.qq.com/s/whmhm2yzug2WVdH3dTq8hg
- JavaScript与多线程的不解之缘!
前言 对于前端开发者来说,多线程是一个比较陌生的话题.因为JavaScript是单线程语言.也就是说,所有任务只能在一个线程上完成,一次只能做一件事.前面的任务没做完,后面的任务只能等着. UI渲染与 ...
- loj10009钓鱼___vector的调试
题目描述 在一条水平路边,有 n 个钓鱼湖,从左到右编号为1,2,...,n .佳佳有 h 个小时的空余时间,他希望利用这个时间钓到更多的鱼.他从1 出发,向右走,有选择的在一些湖边停留一定的时间( ...