线段树RE,求救

P2367 语文成绩

冈崎梦美 @ 2018-04-08 23:20:40

药丸啊,感觉自己写的并没有任何不妥……虽然我知道这题写线段树会MLE但是还是决定写一下结果挂了……调了半天也没调好,求救。

#include<bits/stdc++.h>
#define maxn 5000001
using namespace std;
struct node
{
    int l,r,val,lazy;
}tree[maxn*4];
int n,m;
void write(int x)
{
    if (x<0) x=-x;
    if (x>9) write(x/10);
    putchar(x%10+'0');
}
int read()
{
    int x=0;char ch;
    for(;!isdigit(ch);ch=getchar());
    for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
    return x;
}
void push_up(int p)
{
    tree[p].val=min(tree[p*2].val,tree[p*2+1].val);
}
void build(int l,int r,int p)
{
    if (l==r)
    {
        tree[p].l=tree[p].r=l;
        tree[p].val=read();
        return;
    }
    int mid=(l+r)/2;
    build(l,mid,p*2);
    build(mid+1,r,p*2+1);
    push_up(p);
}
void push_down(int p)
{
    tree[p*2].val+=tree[p].lazy*(tree[p*2].r-tree[p*2].l+1);
    tree[p*2+1].val+=tree[p].lazy*(tree[p*2+1].r-tree[p*2+1].l+1);
    tree[p*2].lazy+=tree[p].lazy;
    tree[p*2+1].lazy+=tree[p].lazy;
    tree[p].lazy=0;
}
void updata(int l,int r,int C,int p)
{
    if (tree[p].l==l&&tree[p].r==r)
    {
        tree[p].val+=C*(tree[p].r-tree[p].l);
        tree[p].lazy+=C;
        return;
    }
    if (tree[p].l==tree[p].r) return;
    push_down(p);
    int mid=(tree[p].l+tree[p].r)/2;
    if (r<=mid) updata(l,r,C,p*2);
    else if (l>mid) updata(l,r,C,p*2+1);
    else
    {
        updata(l,mid,C,p*2);
        updata(mid+1,r,C,p*2+1);
    }
    push_up(p);
}
int query(int l,int r,int p)
{
    if (tree[p].l==l&&tree[p].r==r) return tree[p].val;
    push_down(p);
    int mid=(tree[p].l+tree[p].r)/2,res=0;
    if (r<=mid) res=query(l,r,p*2);
    else if (l>mid) res=query(l,r,p*2+1);
    else res=min(query(l,mid,p*2),query(mid+1,r,p*2+1));
    return res;
}
int main()
{
    n=read();m=read();
    build(1,n,1);
    for(int i=1;i<=m;i++)
    {
        int l=read(),r=read(),num=read();
        updata(l,r,num,1);
    }
    write(query(1,n,1));
    return 0;
}

by Anguei @ 2018-04-08 23:24:15

@LGW2016B02 有时候 RE 就是严重 MLE


by 冈崎梦美 @ 2018-04-08 23:32:43

@yyfcpp 这么强的么……可是我是在本地跑的样例啊……


by 冈崎梦美 @ 2018-04-08 23:36:31

把maxn缩小到50001之后还是不行啊……样例都RE


by Anguei @ 2018-04-08 23:41:52

@LGW2016B02 读入优化那里的 ch 没初始化?


by Anguei @ 2018-04-08 23:50:06

@LGW2016B02 貌似是 query 的时候进行 pushdown 越界了


by Anguei @ 2018-04-08 23:52:42

@LGW2016B02

调试信息:

-       tree[p*2]   {l=??? r=??? val=??? ...}   node
        l   <无法读取内存>    
        r   <无法读取内存>    
        val <无法读取内存>    
        lazy    <无法读取内存>    

by AThousandSuns @ 2018-04-09 10:07:36

有时候MLE算到RE


by 冈崎梦美 @ 2018-04-09 18:04:42

@yyfcpp 这题怕是有毒……谢谢您的帮助,我不打算用线段树写了,差分水过去吧……


by Anguei @ 2018-04-09 19:54:26

@AThousandSuns 理论上讲,这么写占用内存大概是 300MB,不至于 RE。


by Anguei @ 2018-04-09 19:54:54

@LGW2016B02 改天我用线段树写写试试吧


|