牛逼起来了

P2572 [SCOI2010] 序列操作

peterwuyihong @ 2021-10-19 22:01:02

猫猬兽写了个暴力,然后过了。。。

除了O2其他优化啥都没加

卡ODT的时候忘了暴力吗

还有最重要一点

为什么这个题有人想过去打暴力啊


by Isshiki·Iroha @ 2021-10-20 07:48:37

@peterwuyihong

是纯暴力呀,我是代码公开的,你柯以康康的


by 猫猬兽 @ 2021-10-20 07:55:46

@Isshiki·Iroha 常数太大


by 猫猬兽 @ 2021-10-20 07:56:28

#include<cstdio>
#include<iostream>
using namespace std;
int n,m,a[100001],i,j,b,c,d,l,r;
int main()
{
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;++i)scanf("%d",&a[i]);
    for(i=1;i<=m;++i)
    {
        scanf("%d%d%d",&b,&l,&r);++l;++r;
        if(b<=1)for(j=l;j<=r;++j)a[j]=b;
        if(b==2)for(j=l;j<=r;++j)a[j]=1-a[j];
        if(b==3)
        {
            c=0;
            for(j=l;j<=r;++j)c=c+a[j];
            printf("%d\n",c);
        }
        if(b==4)
        {
            d=0;c=0;
            for(j=l;j<=r;++j)
            {
                if(a[j]==1)++c;
                else c=0;
                d=max(d,c);
            }
            printf("%d\n",d);
        }
    }
    return 0;
}

这个最大点<500ms


by peterwuyihong @ 2021-10-20 08:00:23

@Isshiki·Iroha @猫猬兽

不是常数大的问题


by Isshiki·Iroha @ 2021-10-20 08:00:24

@猫猬兽

iee,那里常数大,还望大佬指出


by peterwuyihong @ 2021-10-20 08:01:47

@Isshiki·Iroha @猫猬兽

注意到你们 4 操作不一样

猫猬兽是每次都取一下max

但这样更快了

大概是因为O2会智慧去掉冗余操作


by Isshiki·Iroha @ 2021-10-20 08:03:04

@peterwuyihong

我超,我挪出去就 AC 了,但还是不懂,挪出去运算次数不是显然增多吗?


by 猫猬兽 @ 2021-10-20 08:03:24

你这个改成每次max就500ms内了


by peterwuyihong @ 2021-10-20 08:03:59

@Isshiki·Iroha O2会在内部优化,具体我也不清楚


by Isshiki·Iroha @ 2021-10-20 08:04:10

但是为什么嘞


上一页 | 下一页