【Hack!】bzoj2850 TLE && 求正解

题目及题解传送门

然而今天在做另一道题时回想起了这道题,发现时间复杂度并不能证明为$O(n\log n)$或$O(n\sqrt n)$。

然后仔细一想竟然发现时间复杂度是$O(n^2)$的?!

该题题解为KD-tree,然而事实上这样分割矩形的方法是非常不科学的,于是出了一组数据卡掉了它。

原题中要求的是ax+by<c的,即在ax+by-c=0这条直线以下的所有点的权值之和。那么只要让直线穿过所有矩形即可。

然后有了右图的思路:

这样建树的中序遍历就是从左下到右上的顺序,而这里面任意两个点构成的矩形均被直线所穿过。这样一来每次查询都需要查询整棵树,从而时间复杂度退化到$O(n^2)$。

数据生成器:

#include <cstdio>
int main()
{
	freopen("data.in" , "w" , stdout);
	int n = 50000 , m = 50000 , i;
	printf("%d %d\n" , n , m);
	for(i = 1 ; i <= n ; i ++ )
		printf("%d %d 1\n" , i / 2 * 2 , (i + 1) / 2 * 2 - 1);
	for(i = 1 ; i <= m ; i ++ ) printf("1 -1 0\n");
	return 0;
}

然后博主本人做了一个小实验,把网上的标程都复制粘贴下来,使用Lemon,时间限制10s,内存限制512MB并开启O2开关进行评测。

结果通过率为0%

结果如下:

    

(这里为保护其他人隐私,将别人的名称涂掉了,只留下尴尬的爆零的博主)。

所以说本题正解一定不是KD-tree!(正解被Hack掉了)

那么正解究竟是什么?

其实博主也很好奇,但是网上的题解全都是被卡掉了的KD-tree,于是在这里真心求正解。

希望知道正解的好心人能够将题解发给博主,博主将万分感激!

另附bzoj discuss: http://www.lydsy.com/JudgeOnline/wttl/thread.php?tid=4493

时间: 2024-10-25 10:19:28

【Hack!】bzoj2850 TLE && 求正解的相关文章

[华为机试练习题]36.简单错误记录(错误 求正解)

题目 描述: 开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号. 处理: 1. 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加: 2. 超过16个字符的文件名称,只记录文件的最后有效16个字符: 3. 输入的文件可能带路径,记录文件名称不能带路径. 题目类别: 字符串 难度: 中级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 一行或多行字符串.每行包括带路径文件名称,行号,以空格

HDU 6625 three arrays 求两个序列异或最小值的排列(一个可以推广的正解

目录 题意: 解析 原题描述 @(hdu 6625求两个序列异或最小值的排列) 题意: \(T(100)\)组,每组两个长度为\(n(100000)\)的排列,你可以将\(a[]\)和\(b[]\)随机排列,可以得到\(c[i]=a[i]\)^\(b[i]\),求字典序最小的\(c[]\). 解析 一个显然对的贪心做法: 针对本题 每次两颗字典树同时往下走,如果都有\(0\)或者\(1\)这条路径,就随便同时走\(0\;or\;1\)这条路径,否则只能一个走\(0\),一个走\(1\).这样复杂

不求甚解与求甚解的阶段区分

前几日砍瓜切菜般搭建了一个简单的网站,之后便进入一段目标迷茫期,同时也深知自己立足未稳,基础未牢:往前走又有诸多岔路口,毫无疑问会分散自己本就不多的精力. 我是继续不求甚解地走下去:用同样的手法搞定CSS.JAVASCRIPT等等或是退回去,求甚解Python和Django? 其实不冲突,前提是你要知道自己内心惶恐的原因并且解决. 知此,你才能够明辨何时不求甚解,何时求甚解. 版权声明:本文为博主原创文章,未经博主允许不得转载.

HDU 4251 --- 主席树(划分树是正解)

题意:查询区间中位数 思路:模板题,相当于区间第K大的数,主席树可以水过,但划分树是正解.但还没搞明白划分树,先上模板 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <cstdlib> 6 #include <string> 7 #include <vector> 8 #include

【百度之星2014~复赛 解题报告~正解】The Query on the Tree

声明 笔者近期意外的发现 笔者的个人站点http://tiankonguse.com/ 的非常多文章被其他站点转载.可是转载时未声明文章来源或參考自 http://tiankonguse.com/ 站点,因此.笔者加入此条声明. 郑重声明:这篇记录<[百度之星2014~复赛 解题报告~正解]The Query on the Tree>转载自 http://tiankonguse.com/的这条记录:http://tiankonguse.com/record/record.php?id=674

Linux学习之路之DNS的配置文件和正解区域文件、反解区域文件

DNS正解区域文件 在DNS中,我们知道有域和区域的概念,域的英文名称是domain,它是一种逻辑概念:而区域英文全称zone,它是一种物理概念.且zone分为正解区域和反解区域 正解区域:提供正向解析的服务,即FQDN-->IP的过程 反解区域:提供反向解析的服务,即IP-->FQDN的过程 不管好似正解区域还是反解区域,都通过了一个配置文件,这个文件中的每一个条目就是一个资源记录(Resource Record,RR). 资源记录的类型主要有这些,且这些资源记录的格式为: SOA:起始授权

Arbitrage(最短路-floyd算法变形求正权)

Arbitrage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16127   Accepted: 6780 Description Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency into more than one unit of the same currenc

linux_DNS服务器(正解/反解)的简单创建

什么是DNS? DNS(Domain Name System) 域名系统.它是如今互联网上能够相互通信的服务之一,对于现在的互联网特别特别重要的,因为在这个人们不能很好记忆数字IP地址的问题上,输入IP地址来访问其他的主机是很困难的,和不现实的,如果数字IP地址用我们所熟悉的各种名称(字符,例如:baidu taobao 等)就很好记忆啦.DNS就是来完成这个解析的功能的. DNS工作的原理: 首先,我们先了解一个内容,例如www.baidu.com, www.baidu.com 在DNS中是有

Bzoj 1537: [POI2005]Aut- The Bus 题解 [由暴力到正解]

1537: [POI2005]Aut- The Bus Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 387  Solved: 264[Submit][Status][Discuss] Description Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 到 m编号. 每个路口用两个数(i, j) 表示(1 <= i <= n, 1 <= j