whu 1581 Union of cubes
题目链接: http://acm.whu.edu.cn/land/problem/detail?problem_id=1581
---------------------------------------------------------------------------------------
观察到第一维最大只有$10$ 于是第一维可以直接枚举 $($把长方体切成矩形$)$
观察到第二维最大只有$100$ 于是第二维也可以继续枚举 $($把矩形切成线段$)$
如果最后一维用线段树实现区间覆盖的话 复杂度为
$O(n^{2}kmlog(n * k ^ 2))$ $(n <= 10, k <= 10, m <= 1000)$
由于时限只有$500ms$ 还有多组数据 这样很可能$T$掉
再多想想我们会发现只有区间覆盖操作而没有区间修改操作$($相当于没有回档功能$)$
那就直接维护每个点所在覆盖线段的右端点即可
而维护操作显然是用并查集比较方便
复杂度减少了一个$log$后 单组$10^6$ 多组也不会$T$了
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int a[][][], fa[][][];
int n, k0, m, n2, n3, sum, ans;
int p1, q1, r1, p2, q2, r2;
int findf(int x, int y, int z)
{
if(fa[x][y][z] != z)
fa[x][y][z] = findf(x, y, fa[x][y][z]);
return fa[x][y][z];
}
int main()
{
while(scanf("%d%d%d", &n, &k0, &m) != EOF)
{
n2 = n * k0;
n3= n2 * k0;
for(int i = ; i <= n; ++i)
for(int j = ; j <= n2; ++j)
{
for(int k = ; k <= n3; ++k)
{
scanf("%d", &a[i][j][k]);
fa[i][j][k] = k;
}
fa[i][j][n3 + ] = n3 + ;
}
sum = ;
ans = -1e9;
while(m--)
{
scanf("%d%d%d%d%d%d", &p1, &q1, &r1, &p2, &q2, &r2);
for(int i = p1; i <= p2; ++i)
for(int j = q1; j <= q2; ++j)
for(int k = r1; k <= r2; k = fa[i][j][k])
if(findf(i, j, k) == k)
{
sum += a[i][j][k];
fa[i][j][k] = findf(i, j, k + );
}
ans = max(ans, sum);
}
printf("%d\n", ans);
}
return ;
}
whu 1581 Union of cubes的更多相关文章
- SQL Server-聚焦UNIOL ALL/UNION查询(二十三)
前言 本节我们来看看有关查询中UNION和UNION ALL的问题,简短的内容,深入的理解,Always to review the basics. 初探UNION和UNION ALL 首先我们过一遍 ...
- SQL 提示介绍 hash/merge/concat union
查询提示一直是个很有争议的东西,因为他影响了sql server 自己选择执行计划.很多人在问是否应该使用查询提示的时候一般会被告知慎用或不要使用...但是个人认为善用提示在不修改语句的条件下,是常用 ...
- LINQ to SQL语句(8)之Concat/Union/Intersect/Except
适用场景:对两个集合的处理,例如追加.合并.取相同项.相交项等等. Concat(连接) 说明:连接不同的集合,不会自动过滤相同项:延迟. 1.简单形式: var q = ( from c in db ...
- SQLServer-----Union,Union All的使用方法
转载: http://blog.csdn.net/kiqinie/article/details/8132485 select a.Name from Material as a union sele ...
- 假如 UNION ALL 里面的子句 有 JOIN ,那个执行更快呢
比如: select id, name from table1 where name = 'x' union all select id, name from table2 where name = ...
- sql union和union all的用法及效率
UNION指令的目的是将两个SQL语句的结果合并起来.从这个角度来看, 我们会产生这样的感觉,UNION跟JOIN似乎有些许类似,因为这两个指令都可以由多个表格中撷取资料. UNION的一个限制是两个 ...
- 【oracle】union、union all、intersect、minus 的用法及区别
一.union与union all 首先建两个view create or replace view test_view_1 as as c from dual union as c from dua ...
- sql with as union all
WITH RPL (FId,Fname,Forder) AS ( SELECT ment.deptno,ment.deptname,ment.orderno FROM JTERP..fg_depart ...
- Oracle 中 union 和union all 的简单使用说明
1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...
随机推荐
- 51nod1769 Clarke and math 2
题目 实际上就是要求\(f*I^k\). 因为\(I^k\)是一个积性函数,所以我们只需要考虑如何求\(I^k(p^a)\). 把这个东西转化成一个长度为\(k\)的序列,每一位是\(\frac{i_ ...
- [LeetCode] 95. 不同的二叉搜索树 II
题目链接 : https://leetcode-cn.com/problems/unique-binary-search-trees-ii/ 题目描述: 给定一个整数 n,生成所有由 1 ... n ...
- 搜索专题: HDU1429胜利大逃亡
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- Cookie&Session笔记
# 今日内容 1. 会话技术 1. Cookie 2. Session 2. JSP:入门学习 ## 会话技术 1. 会话:一次会话中包含多次请 ...
- [七月挑选]Tomcat使用命令行启动之指定jdk版本
title: Tomcat使用命令行启动之指定jdk版本 准备好环境,jdk和tomcat. 主要步骤 1.找到Tomcat/bin/catalina.bat文件. 2.在文件前端添加如下. set ...
- PHP7.2 、git、swoole安装
一.安装php 1.安装gcc yum -y install gcc gcc-c++ 2.安装一些库 yum -y install php-mcrypt libmcrypt-devel libxml2 ...
- C# wpf image绑定viewModel没有显示图片
在wpf绑定图片,用viewModel的图片绑定image 我是用viewModel.cs public class viewModel:INotifyPropertyChanged { #regio ...
- Linux下载:wget、yum与apt-get用法及区别
一般来说著名的linux系统基本上分两大类: RedHat系列:Redhat.Centos.Fedora等 Debian系列:Debian.Ubuntu等 RedHat 系列 常见的安装包格式 rpm ...
- vim查找和替换
https://www.cnblogs.com/huxinga/p/7942194.html %s/husband/丈夫/g
- React 应用设计之道 - curry 化妙用
使用 React 开发应用,给予了前端工程师无限"组合拼装"快感.但在此基础上,组件如何划分,数据如何流转等应用设计都决定了代码层面的美感和强健性. 同时,在 React 世界里提 ...