本题数据过水&建议添加hack数据。
查看原帖
本题数据过水&建议添加hack数据。
749325
Sincerin楼主2023/2/5 11:19

之前@Unique_Hanpi 提供了hack数据,但是这快半年了多头也没有来处理,所以发一下吧。是这样的,本题我用假做法通过了此题,并取得了非常优秀的时间。

思路就是很朴素的普通线段树,在修改过程中把一些不必要的修改转换为了区间 tag\operatorname{tag} 来优化时间。这个做法会被没有区间所有数都相同的数据卡掉,退化到 Θ(nq)\Theta(nq) 的时间复杂度。

在这里提供数据生成器,然后用第一篇@BigSmall_En 题解的严格 Θ(nlogn)\Theta(n \log n) 写法完全可以通过。

#include <bits/stdc++.h>
using namespace std; 
int main() 
{
    freopen("test.in","w",stdout);
    int n=500000,q=500000;
    cout<<n<<' '<<q<<"\n";
    for(int i=1;i<=n;++i) 
	{
        if(i&1) printf("500000 ");
        else printf("1 ");
    }
    puts("");
    for(int i=1;i<=100000;i++) 
	{
        printf("1 1 500000 %d\n",1);
    }
	for(int i=1;i<=200000;i++) 
	{
        printf("2 1 500000 %d\n", 500000-i);
    }
    for(int i=1;i<=100000;i++) 
	{
        printf("3 1 500000 %d\n",500000-i);
    }
    for(int i=1;i<=100000;i++) 
	{
        printf("4 1 500000\n");
    }
    return 0;
}
2023/2/5 11:19
加载中...