lower_bound不能乱用。。血的教训!

之前写了一题本应用Splay维护单点修改,查询最小的不小于它的那个数排在哪个位置。

我偷了下懒,用STL做。。。结果TLE了。。。

我们使用这段短短的代码进行测试:

#include <cstdio>
#include <set>

using namespace std;

set <int> g;
int n;

int main() {
    freopen("s.in","r",stdin);
    freopen("s.out","w",stdout);
    scanf("%d", &n);
    g.clear();
    for (int i=1;i<=n;i++) g.insert(i);
    for (int i=1;i<=n;i++) printf("%d\n", *lower_bound(g.begin(), g.end(), i));
    return 0;
}

我们尝试n = 10000的测试数据,用时2.71s。

我们尝试n = 50000的测试数据,用时64.25s。

我们去掉lower_bound试试?

尝试n = 10000的测试数据,用时0.01s。

尝试n = 50000的测试数据,用时0.1s。

看来在STL set里用lower_bound效率是n^2的。

看来。。我还是得认认真真地写Splay。。。

lower_bound不能乱用。。血的教训!

时间: 2024-12-13 05:50:54

lower_bound不能乱用。。血的教训!的相关文章

dbCreate 的重要性,血的教训

DataSource.groovy文件中的dbCreate属性十分重要,因为它可以用来指定是否自动根据GORM类来创建数据库表.其可选值为: create-drop - 当Grails运行时删除并重新建立数据库 create - 如果数据库不存在则创建数据库,存在则不作任何修改 update - 如果数据库不存在则创建数据库,存在则进行修改 开发环境(development)下dbCreate属性默认设置为create-drop: dataSource { dbCreate = "create-

血的教训,下次开工程 一点要写好判断空字符串方法

+ (BOOL)isEmptyObject:(NSObject *)object { if ([object isEqual:[NSNull null]] || object == nil) { return YES; } else if ([object isKindOfClass:[NSString class]]) { NSString *string = (NSString *)object; if (0 == [string length]) { return YES; } } ret

LCD屏背光驱动调试心得---血的教训

开发板:明远智睿MY-IMX6-EK140 内核源码:linux-3.14.52 背光驱动IC:MP3202 调光原理:通过开发板的核心板PWM4引脚控制MP3202的EN脚,输出不同的占空比从而达到输出平均电流的不同,这样就可以达到调节背光亮度的目的 调试过程: 1.从硬件图可以看出核心板的PWM4引脚连接到了背光驱动IC MP3202的EN脚,所以我们通过搜索PWM4来找设备树上的硬件节点 2.在明远智睿MY-IMX6-EK140设备树,arch/arm/boot/dts/myimx6ek1

一位工作了10年的程序员总结了这10个血的教训

1.不要轻易换笔记本电脑,不要跟潮流,不要买过多的电子产品,不要过于频繁的更换手机 这方面我的经验教训也是惨痛的.我大概前后购买过 5-6 个笔记本,以前的都是 1 万多元一台,最近买的这台 1 万多是给女朋友的,自己买了一台是 7500 元左右,手机大概换过接近 10 个了,这些钱加起来也足够有 10 万以上了. 平时笔记本啥的贵重物品要保护好,我一个同事不小心丢了 2 台笔记本电脑,接近 2 万的损失啊,你净赚 2 万,不是那么容易的,这个窟窿不是开玩笑的,我曾经也被人偷了一个崭新的笔记本,

记录一次误删数据库指定数据----------&gt;血的教训

本来要进行select的查询,结果不小心误执行了delete的命令,导致unitID=100004的数据全部被删除 这下尴尬了 这可是线上的数据库啊 , 赶紧去查看binlog日志 期望能恢复 万幸公司数据库用的是阿里云的RDS数据库 自带数据跟踪然后输入任务名称 当时误操作的时间段 切记: 必须在60分钟以内进行操作 搜索日志时可以指定字段 然后 选择查看详情 查看所有被误删操作的详情后 以下图表中 变更语句 是误操作执行过的命令, 然后最下面会有回滚语句,如果有多个被删的详情列表 需要全部将

职场血的教训

楼主,.NET老菜鸟一枚,常年奋斗在一线的码砖工人,去年被北上广爆炸性的房价,吓回了老家.入职了一家本土企业,薪资,工作都还不错,前期倒是喜滋滋.入职该公司,负责了公司的一款现有产品的开发,经过一年努力,倒也是干出了一番成绩. 今年过来,顶头上司觉得我也是年纪蛮大的老菜鸟了,然后平时与人沟通属于配合型人才,能够做到主动良好沟通和合作.于是决定抬我一把,让我也试试领导,领导多几个开发小组.正好去年那款项目已经进入维护阶段,事情倒也不多,也就把当时的组解散了.重新划分了另外几个组给我管理,我心想这真

fpga笔试题集锦(血的教训)

1.名词解释: FPGA:现场可编程门阵列,一般工艺SRAM(易失性),所以要外挂配置芯片. CPLD:复杂可编程逻辑器件,一般工艺Flash(不易失). ASIC:专用集成电路 SOC:片上系统 SOPC:片上可编程系统 2.Verilog语法类: ①Verilog两大数据类型:一类是线网类型,另一类是寄存器类型. 线网类型表示硬件电路元件之间实际存在的物理连线,有很多种:wire.tri.wor等等,当然日常使用wire最多,其他的都没遇到过. 寄存器类型表示一个抽象的数据存储单元,只能在i

双系统linux+win之血的教训

绝对不要用win的软件来直接处理linux分区!!!!! 可以用再生龙做备份,可以用ubuntu-live等linux下的分区工具来分区.

血的教训---工作中注意的事项(未完)

工作中注意的事项 1. 千万不要执行:yum -y remove python 或者 rpm -e python --nodeps 因为yum是使用python编写的,如果把python卸载了,则yum将不能再继续使用了 如果想自己编译安装新版本的python,也千万不要卸载掉centos自带的python,不用管它就好 2. 千万不要执行:iptables -F 因为如果你的filter表中的INPUT链默认的规则是所有的请求都拒绝的话,就完了 [[email protected] ~]# i