编译失败又不显示哪里出错是什么鬼

P4513 小白逛公园

chaotic @ 2022-04-08 16:59:40

一直编译失败又不显示哪里出错是什么鬼

本地又好好的

评测记录

附上代码:

#include<bits/stdc++.h>
using namespace std;
struct SegmentTree{
    int pre=0,suf=0,data=-1e9,sum=0,left=0,right=0;
    #define pre(x) c[x].pre
    #define suf(x) c[x].suf
    #define data(x) c[x].data
    #define sum(x) c[x].sum
    #define l(x) c[x].left
    #define r(x) c[x].right
}c[2000010];
int a[500010],tmpx,tmpy,n,m,flag;
void built(int l,int r,int rt)
{
    l(rt)=l;r(rt)=r;
    if(l==r)
    {
        pre(rt)=suf(rt)=data(rt)=sum(rt)=a[l];
        return;
    }
    int mid=(l+r)>>1;
    built(l,mid,rt<<1);
    built(mid+1,r,rt<<1|1);
    pre(rt)=max(pre(rt<<1),sum(rt<<1)+pre(rt<<1|1));
    suf(rt)=max(suf(rt<<1|1),sum(rt<<1|1)+suf(rt<<1));
    sum(rt)=sum(rt<<1)+sum(rt<<1|1);
    data(rt)=max(suf(rt<<1)+pre(rt<<1|1),max(data(rt<<1),data(rt<<1|1)));
}
SegmentTree query(int l,int r,int rt)
{
    if(l<=l(rt)&&r(rt)<=r)
        return c[rt];
    int mid=(l(rt)+r(rt))>>1;
    if(mid>=l&&mid<r)
    {
        SegmentTree ans,a,b;
        a=query(l,r,rt<<1);
        b=query(l,r,rt<<1|1);
        ans.data=max(ans.data,max(a.suf+b.pre,max(a.data,b.data)));
        ans.pre=max(a.pre,a.sum+b.pre);
        ans.suf=max(b.suf,b.sum+a.suf);
        ans.sum=a.sum+b.sum;
        return ans;
    }
    else if(mid>=l) return query(l,r,rt<<1);
    else return query(l,r,rt<<1|1);
}
void change(int w,int p,int rt)
{
    if(l(rt)==r(rt))
    {
        pre(rt)=suf(rt)=data(rt)=sum(rt)=a[w]=p;
        return;
    }
    int mid=(l(rt)+r(rt))>>1;
    if(mid>=w) change(w,p,rt<<1);
    else change(w,p,rt<<1|1);
    pre(rt)=max(pre(rt<<1),sum(rt<<1)+pre(rt<<1|1));
    suf(rt)=max(suf(rt<<1|1),sum(rt<<1|1)+suf(rt<<1));
    sum(rt)=sum(rt<<1)+sum(rt<<1|1);
    data(rt)=max(suf(rt<<1)+pre(rt<<1|1),max(data(rt<<1),data(rt<<1|1)));
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    built(1,n,1);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&flag,&tmpx,&tmpy);
        if(flag==2) change(tmpx,tmpy,1);
        else
        {
            if(tmpx>tmpy) swap(tmpx,tmpy);
            printf("%d\n",query(tmpx,tmpy,1).data);
        }
    }
    return 0;
}

by mmr123 @ 2022-04-08 17:01:33

很显然您应该截图或者开启代码公开


by Engulf @ 2022-04-08 17:02:30

出错啦

3 秒后将返回上一页

您不能查看本条评测记录


by chaotic @ 2022-04-08 17:03:12

哦哦哦,公开了


by Dream_weavers @ 2022-04-08 17:04:16

很有可能是你谷评测机出问题了(


by Raymondzll @ 2022-04-08 17:04:30

有没有这样一种可能,是评测机波动。


by chaotic @ 2022-04-08 17:04:50

交4次了


by chaotic @ 2022-04-08 17:07:41

草,随便交了一个其他题目AC代码也编译错误

显示No space left on device,我麻了


by chenpengda @ 2022-04-08 17:09:44

洛谷最近评测机内存没了(


by chaotic @ 2022-04-09 08:07:24

破案了(这是一个曲折的故事)

我先交了一个A+B代码,可编译,考虑到是不是MLE,数组改小可编译,但WA了

我拼命压空间,但还是爆,于是我交了一篇题解

然后题解巨大空间过了

我注意了c++下方提示

发现原因竟是不能命名SegmentTree结构体,改成了Node

还有结构体中似乎不能赋值,于是把=0与=-1e9删了,下面改成ans.dat=max(a.suf+b.pre,max(a.dat,b.dat));

这样就A了(?)

还有那次交的题解请不要判成CTJ啊


|