Hack 本题唯一一片题解
  • 板块CF1599E Two Arrays
  • 楼主zesqwq
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/3/28 09:35
  • 上次更新2023/10/23 20:15:49
查看原帖
Hack 本题唯一一片题解
615348
zesqwq楼主2023/3/28 09:35
#include <bits/stdc++.h>
using namespace std;
int main() {
    freopen("in", "w", stdout);
    int n = 5e4;
    cout << n << ' ' << n << endl;
    for (int i = 1; i <= n; i++) printf("%d ", i);
    putchar('\n');
    for (int i = 1; i <= n; i++) printf("%d ", i);
    putchar('\n');
    for (int i = 1; i <= n; i++) printf("%d %d %d\n", 4, 1, n);
    return 0;
}

题解 : TLE。

原因:题解中有这么一句话:

若当前节点有一个数列的 mn==mx 说明这个数列这一段区间的所有数是相等的(可以想想为什么),这个时候就可以直接累加上两个区间的矩阵乘积 。

以及题解代码中的 query:

void query(int p,int l,int r){
	if(t[p][0].l>r||t[p][0].r<l) return;
	if(l<=t[p][0].l&&t[p][0].r<=r){
	    if(t[p][0].mx==t[p][0].mn){
	    	ans+=t[p][0].mn.m*t[p][1].sum;
	    	return;
		}
		if(t[p][1].mx==t[p][1].mn){
			ans+=t[p][1].mn.m*t[p][0].sum;
			return;
		}
	}
	pushdown(p,0); pushdown(p,1);
	query(ls,l,r); query(rs,l,r);
}

我想了想为什么,然后发现这样做时间复杂度是错的。

这个时间复杂度是基于颜色段的,即只要颜色段非常多,时间复杂度就会升天。

我并没有在题面中找到对此相关的性质,因此我认为该题解有误。

正确的做法在题解中也并没有给出,申请撤下该题解。

@outcast

@feecle6418

2023/3/28 09:35
加载中...