news 2026/4/18 14:14:33

P6648 [CCC 2019] Triangle: The Data Structure [st表]

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
P6648 [CCC 2019] Triangle: The Data Structure [st表]

P6648 [CCC 2019] Triangle: The Data Structure

时间限制: 2.00s 内存限制: 128.00MB

复制 Markdown 退出 IDE 模式

题目背景

在 Shuchong 的平行宇宙里,计算机学中的最重要的数据结构就是三角形。
注:因为原数据包太大,故这题缩减了一些数据,具体缩减的数据点如下:

  • Subtask 1:1 ~ 10
  • Subtask 2:1 ~ 10

所以此题拥有的测试点为:

  • Subtask 1:11 ~ 26
  • Subtask 2:11 ~ 24

若想测试本题没有的测试点请到 此处 测试。

题目描述

大小为 m 的一个三角形由 m 行组成,第 i 行包含 i 个元素。
并且,这些行必须排为等边三角形的形状。
比如说,以下是一个 m=4 的三角形。


每个三角形还包含子三角形。
比如说上面这个三角形,包含:

  • 10 个大小为 1 的三角形。
  • 6 个大小为 2 的三角形。
  • 3 个大小为 3 的三角形。

注意,每个三角形都是自身的子三角形。
现在给定一个大小为 n 的三角形,求对于每个大小为 k 的子三角形,子三角形内几个数的最大值的和。

输入格式

第一行两个整数 n,k 代表三角形的大小和要求的子三角形的大小。
接下来 n 行第 i 行有 i 个整数代表这个三角形。

输出格式

一行一个整数代表对于每个大小为 k 的子三角形,子三角形内几个数的最大值的和。

输入输出样例

输入 #1复制运行

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

输出 #1复制运行

23

说明/提示

数据规模与约定
  • Subtask 1(25 pts):n≤1000。
  • Subtask 2(75 pts):无特殊限制。

对于 100% 的数据,1≤k≤n≤3000,0≤ 三角形内每个数 ≤109。

说明

翻译自 CCC 2019 Senior T5 Triangle: The Data Structure。
翻译者:@一只书虫仔。

题目要求我们求每个大小为k的三角形的最大值 之和 对于最值问题 有明显的区间可重复性 可以考虑st表解决

对于一个2^k 的三角形 我们可以用最多六个2^k-1 的三角形进行覆盖 得出最大值

同时防止内存 加上滚动数组

对于询问部分 我们要从边界开始减 防止越界 然后计算合适的偏移量 计算中间的小三角形 最后累加答案即可

#include <bits/stdc++.h> using namespace std; const int N=3e3+5; int st[N][N][2],n,k; long long ans; int query(int i,int j){ int t=log2(k); int v=t&1; int l=i+k-1,r=j+k-1; int res=max(st[i][j][v],max(st[l-(1<<t)+1][j][v],st[l-(1<<t)+1][r-(1<<t)+1][v])); if(t<=1)return res; int dis=(k-(1<<t))>>1; res=max(max(res,st[l-(1<<t)+1][j+dis][v]),max(st[i+dis][j][v],st[i+dis][j+dis][v])); return res; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>k; int len=log2(k); for(int i=1;i<=n;i++){ for(int j=1;j<=i;j++){ cin>>st[i][j][0]; } } for(int t=1;t<=len;t++){ int u=t&1,v=u^1; for(int i=1;i<=n-(1<<t)+1;i++){ for(int j=1;j<=i;j++){ st[i][j][u]=max(st[i][j][v],max(st[i+(1<<t-1)][j][v],st[i+(1<<t-1)][j+(1<<t-1)][v])); if(t>1){ st[i][j][u]=max(st[i][j][u],max(st[i+(1<<(t-1))][j+(1<<t-2)][v],max(st[i+(1<<t-2)][j+(1<<t-2)][v],st[i+(1<<t-2)][j][v]))); } } } } for(int i=1;i<=n-k+1;i++){ for(int j=1;j<=i;j++){ ans+=query(i,j); } } cout<<ans<<'\n'; return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:39:42

foobar2000美化配置终极指南:从单调到惊艳的视觉革命

foobar2000美化配置终极指南&#xff1a;从单调到惊艳的视觉革命 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 还在忍受那个灰扑扑的默认界面吗&#xff1f;每次打开音乐播放器&#xff0c;是不是总…

作者头像 李华
网站建设 2026/4/18 8:35:08

OpenCode AI编程助手:重新定义你的开发工作流

OpenCode AI编程助手&#xff1a;重新定义你的开发工作流 【免费下载链接】opencode 一个专为终端打造的开源AI编程助手&#xff0c;模型灵活可选&#xff0c;可远程驱动。 项目地址: https://gitcode.com/GitHub_Trending/openc/opencode 你是否曾经在深夜调试代码时&a…

作者头像 李华
网站建设 2026/4/18 3:50:10

歌词管理神器:跨平台智能歌词提取系统终极指南

歌词管理神器&#xff1a;跨平台智能歌词提取系统终极指南 【免费下载链接】163MusicLyrics Windows 云音乐歌词获取【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 还在为心爱歌曲找不到合适歌词而烦恼&#xff1f;面对海量音乐…

作者头像 李华
网站建设 2026/4/18 3:51:33

NotaGen进阶指南:探索112种风格组合的奥秘

NotaGen进阶指南&#xff1a;探索112种风格组合的奥秘 1. 引言 在人工智能与音乐创作交汇的前沿&#xff0c;NotaGen作为一款基于大语言模型&#xff08;LLM&#xff09;范式生成高质量古典符号化音乐的系统&#xff0c;正逐步改变传统作曲的工作流。该项目由开发者“科哥”基…

作者头像 李华
网站建设 2026/4/18 4:56:32

从风格选择到乐谱输出,NotaGen音乐生成全流程揭秘

从风格选择到乐谱输出&#xff0c;NotaGen音乐生成全流程揭秘 1. 引言&#xff1a;AI驱动的古典音乐创作新范式 1.1 技术背景与行业痛点 传统音乐创作依赖于作曲家长期积累的经验和灵感&#xff0c;过程耗时且难以复现。尽管已有基于规则的算法作曲系统&#xff0c;但其生成…

作者头像 李华
网站建设 2026/4/18 5:43:14

foobox-cn美化革命:重塑你的foobar2000音乐世界

foobox-cn美化革命&#xff1a;重塑你的foobar2000音乐世界 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 作为一名音乐发烧友&#xff0c;我一直在寻找能够完美结合功能性与美观度的音乐播放器美化…

作者头像 李华