忠告后人(特别针对只过了#11或者没过样例)
查看原帖
忠告后人(特别针对只过了#11或者没过样例)
401088
xs_siqi楼主2022/8/2 23:34

这题调了将近 5h5h ,交了三十几次才过。把我调试这道题代码的经验分享给后人。

  • 查验函数(特别是pushuppushdown)顺序。有的时候顺序是不能乱换的,前后顺序会影响赋值。很有可能出现思路正确顺序错误的情况。我原本写了两个pushdown,发现revamp的两次pushdown是必须同时进行的。

  • 查验左儿子和右儿子是否对齐。就这点调了 3h3h。我原本的部分revamp代码如下:

		swap(tr[rt<<1].lmax0,tr[rt<<1|1].lmax1);
		swap(tr[rt<<1].rmax0,tr[rt<<1|1].rmax1);
		swap(tr[rt<<1].sum0,tr[rt<<1|1].sum1);

左儿子和右儿子换显然是不合理的吧?但这代码竟然能过样例,甚至还过了一个数据点。如果您只过了#11,请一定要好好校对左儿子右儿子是否对齐。

  • 左右标记要 ++。就这点我程序一直运行时错误。调了将近 1h1h,重审题面才发现要++!没过样例的一定要好好看看是否有++。

  • 数组开大。起码开 44 倍。常识。但还是容易错。

如果以上做法都没有解决,不排除是代码思路问题的可能。

调了 5h5h 终于过了555

2022/8/2 23:34
加载中...