题目链接
感谢emofunx提供解题思路和耐心答疑!

题目大意:

给你一个高度为n的数字金字塔,求它的所有高度为k的子金字塔的最大值的总和。(1≤k≤n≤3000)(1\le k \le n \le 3000)(1≤k≤n≤3000)

样例输入:

4 2
3
1 2
4 2 1
6 1 4 2

样例输出:

23

解题思路:

对于一个可以移动的固定大小区间内的区间,我们可以想到用滑窗去解决,但是这是二维的,而且还是三角形,咋滑啊?
这时候emofunx说道:其实这类问题的处理都差不多,就是可能麻烦点。
注意到一个大的三角形,是可以由多个小的三角形组成的,这时候我们可以想倍增:预处理出所有高为2^i的三角形的最值。那么2i2^i2i高度的三角形如何推出2i+12^{i+1}2i+1的三角形呢,看图:

如图,可以用三个2i2^i2i高度的三角形拼出1个中空的2i+12^{i+1}2i+1的三角形,因为有空洞,我们不能直接递推。但是我们可以发现:

假设当前三角形左下角为(x,y)(x,y)(x,y)红色这部分的面积可以被左下角坐标为(x,y)到(x+2i,y)(x,y)到(x+2^i, y)(x,y)到(x+2i,y),高度为2i2^i2i的这2i+12^i+12i+1个小三角形完全覆盖。
所以我们可以用滑窗法维护一段区间长度固定的数字的最值来转移维护出倍增数组。最后也可以用滑窗来利用倍增数组得到每个大小为k的子金字塔的最大值,把它们都加到答案里就完事儿了。
ac代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 3e3 + 50;
int f[2][maxn][maxn], a[maxn][maxn];
int n, k;
int q[maxn], head, tail;
int main()
{cin>>n>>k;for(int i = 1; i <= n; ++i){for(int j = 1; j <= i; ++j) scanf("%d", &a[i][j]), f[0][i][j] = a[i][j];} ll ans = 0;if(k == 1){// 特判for(int i = 1; i <= n; ++i){for(int j = 1; j <= i; ++j) ans += a[i][j];}cout<<ans<<endl; return 0;}int cur = 0;for(int t = 1; ; ++t){cur ^= 1;//滚动倍增数组int len, l;//需要获取的三角形大小,滑窗的大小if((1<<t) < k) len = (1<<t), l = len>>1;else len = k, l = k - (1<<(t-1));l++;for(int i = len; i <= n; ++i){head = tail = 0;int o = 1;for(int j = 1; j + len - 1 <= i; ++j){while(o <= j + l - 1){//滑窗获取区间最值while(tail > head && f[cur^1][i][q[tail-1]] <= f[cur^1][i][o]) tail--;q[tail++] = o++;}f[cur][i][j] = max(f[cur^1][i][q[head]], f[cur^1][i-l+1][j]);if(len == k) ans = ans + (ll) f[cur][i][j];if(q[head] == j) head++;}}if(len == k) break;}cout<<ans<<endl;
}
/*
4 3
3
1 2
2 1 3
4 1 1 1
*/

CCC '19 S5 - Triangle: The Data Structure(倍增 + 滑窗最大值)相关推荐

  1. CF data structure 自制题单(一)

    CF data structure 2000~2100 为你的战斗,献上雷鸣般的喝彩!--唔姆 目标 30 道题 1. Problem - 1555E - Codeforces 看了提示 给一些线段, ...

  2. LeetCode Two Sum III - Data structure design

    原题链接在这里:https://leetcode.com/problems/two-sum-iii-data-structure-design/ 题目: Design and implement a ...

  3. TRIE - Data Structure

    Introduction 介绍 Trie,又称单词查找树,是一种树形结构,用于保存大量的字符串.它的优点是:利用字符串的公共前缀来节约存储空间. Trie is an ordered tree dat ...

  4. leetcode 211. Add and Search Word - Data structure design Trie树

    题目链接 写一个数据结构, 支持两种操作. 加入一个字符串, 查找一个字符串是否存在.查找的时候, '.'可以代表任意一个字符. 显然是Trie树, 添加就是正常的添加, 查找的时候只要dfs查找就可 ...

  5. leetcode Add and Search Word - Data structure design

    我要在这里装个逼啦 class WordDictionary(object):def __init__(self):"""initialize your data str ...

  6. 牛客小白月赛11:Rinne Loves Data Structure

    Rinne Loves Data Structure 思路 我们插入的位置大概分了四种: 第一种 显然我们找到比当前插入的值的pre,也就是比当前节点大的最小值. 第二种 我们只要找到当前节点的suc ...

  7. HDU - 7072 Boring data structure problem 双端队列 + 思维

    传送门 文章目录 题意: 思路: 题意: 你需要实现如下四个操作 q≤1e7q\le1e7q≤1e7 思路: 做的时候想了个链表的思路让队友写了,懒. 看了题解感觉题解还是很妙的. 你需要快速插入一个 ...

  8. HDU - 6967 G I love data structure 线段树维护矩阵 + 细节

    传送门 文章目录 题意: 思路: 题意: 给你两个长度为nnn的数组a,ba,ba,b,你需要完成如下四种操作: 思路: 思路还是比较简单的,首先建一颗线段树,线段树中维护a,b,a2,b2,aba, ...

  9. 170. Two Sum III - Data structure design【easy】

    170. Two Sum III - Data structure design[easy] Design and implement a TwoSum class. It should suppor ...

最新文章

  1. matlab外部接口简介
  2. DB2 V8,V9并存在同一 server 的处理
  3. 在新加坡做面试官的经历 (Interviewer Experience for UI/UX Designer in Singapore)
  4. 模块全解======ruby的类是单继承生物、所以出现了module、实现了多继承
  5. 到底应该选择哪种Linux.NET的部署方式?
  6. Struts 2:處理一個form多個submit
  7. boost::hana::slice_c用法的测试程序
  8. 密钥登陆Linux服务器
  9. CF1654F-Minimal String Xoration【倍增】
  10. 【优化运行】基于matlab多目标粒子群算法求解冷热电联供综合能源系统运行优化问题【含Matlab源码 1747期】
  11. OneLedger蓄势待发,引爆跨链热点
  12. 使用极大似然法对逻辑回归中的参数进行估计的数学原理
  13. 山西大学量子计算机,山西大学贾晓军课题组:在量子网络的多个节点之间建立和存储确定性量子纠缠...
  14. 泪目跳槽太不容易,蚂蚁金服三轮面试,四个小时灵魂拷问
  15. 软件供应链安全——组件漏洞的治理
  16. 使用supervisor报错
  17. Jupyter lab add kernel Python+Julia+R 【jupyter Notebook 切换Python环境】and【在jupyter Notebook中安装第三方库】
  18. Android App开发基础
  19. 曾风靡全球的 Delphi,要日薄西山了?
  20. vmware虚拟机安装 安卓Android x86 8.1

热门文章

  1. 黑马瑞吉外卖、菩提阁学习总结
  2. DAISY社3D精品游戏 RIKUEST MOVIE 和 Hyper Impact 汉化补丁
  3. 华为云DLI连接PowerBI Desktop实践指南
  4. ElasticSearch分页查询四种解决方案与原理
  5. 四川对口计算机高考专业试卷,2019年对口高考试卷(计算机)文件.doc
  6. 登录操作之MD5盐值加密
  7. [FairyGUI][Unity]FGUI资源打包AssetBundle
  8. quartus仿真23:3-8线译码器74138的简单应用
  9. 解决安装Eclipse ADT插件时连接不上-报错
  10. CH32V3xx USART 空闲中断+DMA接收