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 @猫猬兽
注意到你们
猫猬兽是每次都取一下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
但是为什么嘞