问题标题: 洛谷:刚学OI的萌新求助QwQ

0
1
已解决
陆麟瑞
陆麟瑞
资深天翼
资深天翼

【模板】线段树 2

30分,WA7个点。

#include <iostream>
using namespace std;
#define it long long
struct xianduan{
    it l,r,sum,sum2;
};
xianduan tree[1000001];
it a[1000001],f[1000001];
it tree2[1000001],tree3[1000001];
int mod;
void build(it x,it l,it r)
{
    tree[x].l=l;
    tree[x].r=r;
    tree3[x]=1;
    if(l==r)
    {
        tree[x].sum=a[l];
        tree[x].sum%=mod;
        return;
    }
    build(x*2,l,(l+r)>>1);
    build(x*2+1,1+((l+r)>>1),r);
    tree[x].sum=tree[x*2].sum+tree[x*2+1].sum;
    tree[x].sum%=mod;
}
void pushdown(it x)
{
    it mid=(tree[x].l+tree[x].r)/2;
    tree[x*2].sum=(tree[x*2].sum*tree3[x]+tree2[x]*(mid-tree[x].l+1))%mod;
    tree[x*2+1].sum=(tree[x*2+1].sum*tree3[x]+tree2[x]*(tree[x].r-mid))%mod;
    tree3[x*2]=(tree3[x*2]*tree3[x])%mod;
    tree3[x*2+1]=(tree3[x*2+1]*tree3[x])%mod;
    tree2[x*2]=(tree2[x*2]*tree3[x]+tree2[x])%mod;
    tree2[x*2+1]=(tree2[x*2+1]*tree3[x]+tree2[x])%mod;
    tree3[x]=1;
    tree2[x]=0;
}
void update(it x,it l,it r,it k)
{
    if(tree[x].l>=l&&tree[x].r<=r)
    {
        tree[x].sum=(tree[x].sum+(tree[x].r-tree[x].l+1)*k)%mod;
        tree2[x]=(tree2[x]+k)%mod;
        return;
    }
    if(tree[x].l>r||tree[x].r<l)
        return;
    it mid=(tree[x].r+tree[x].l)/2;
    pushdown(x);
    update(x*2,l,r,k);
    update(x*2+1,l,r,k);
    tree[x].sum=(tree[x*2].sum+tree[x*2+1].sum)%mod;
}
void update1(it x,it l,it r,it k)
{
    if(tree[x].l>=l&&tree[x].r<=r)
    {
        tree[x].sum=(tree[x].sum*k)%mod;
        tree3[x]=(tree3[x]*k)%mod;
        tree2[x]=(tree2[x]*k)%mod;
        return;
    }
    if(tree[x].l>r||tree[x].r<l)
        return;
    it mid=(tree[x].r+tree[x].l)/2;
    pushdown(x);
    update1(x*2,l,r,k);
    update1(x*2+1,l,r,k);
    tree[x].sum=(tree[x*2].sum+tree[x*2+1].sum)%mod;
}
it query(it x,it l,it r)
{
    if(tree[x].l>=l&&tree[x].r<=r)
        return tree[x].sum;
    if(tree[x].l>r||tree[x].r<l)
        return 0;
    if(tree2[x])pushdown(x);
    return (query(x*2,l,r)+query(x*2+1,l,r))%mod;
}
int main()
{
    it n,m;
    cin>>n>>m>>mod;
    for(it i=1;i<=n;i++)
    cin>>a[i];
    build(1,1,n);
    for(int i=1;i<=m;i++)
    {
        it a,b,c;
        int t;
        cin>>t>>a>>b;
        if(t==2)
        {
            cin>>c;
            update(1,a,b,c);
        }
        else if(t==3) cout<<query(1,a,b)%mod<<endl;
        else 
        {
            cin>>c;
            update1(1,a,b,c);
        }
    }
    return 0;
}

 

现在弱到连线段树板子都不会了


1
已采纳
赵逸凡
赵逸凡
初级启示者
初级启示者

吊打我这个贪心都不牢的蒟蒻呀

赵逸凡在2018-10-07 17:22:00追加了内容

贪心配不上陆大佬的眼光,在他眼里贪心就是hello,world一样不值一提,他已经开始从"贪"和"心"这2个字中开始深入算法了,并不是简单的局部最优推导全局最优了,而是从局部最优与另外n一个局部最优来推导出局部中的暂时最优,再筛选每个局部暂时最优中的联通性,然后分别用深搜和广搜来分出局部暂时最优的最优解,再从深搜广搜中筛出两者之间的局部永恒最优,将另外几个局部暂时最优进行筛选局部永恒第二最优,将其与局部永恒最优建成连通性,用深搜考虑联通的局部暂时最优中最优的,将其作为参考值,参考每个局部暂时最优的联通性,然后用广搜匹配好每个局部暂时最优与参考值的顺序,同时思考局部暂时最优与全局最优解的连通性,最后用分而冶之的策略双双匹配,用背包思路检索没问题后,用广搜估算出全局最优,进行n次估算,最后用快排得到全局最优。

4
毕小曼
毕小曼
初级光能
初级光能

陆大佬,请容我说句大实话。

我都不太想理你,那是因为你经常说自己太弱,伤我自尊。

萌新一次不适合形容你

 

毕小曼在2018-10-01 22:02:39追加了内容

毕小曼在2018-10-01 22:04:31追加了内容

(希望大家不要举报,这是我憋了好久的话,一不小心说了出来)

2
袁翊凡
袁翊凡
新手光能
新手光能

dalao你说这种话,让我们这些蒟蒻情何以堪;

0
0
张睿杰
张睿杰
初级天翼
初级天翼

陆麟瑞,你把算法中级班以上的题目拿给我们看,还不如去看题解呢,我们都是小学生

 

0
0
0
0
陈喆鹏
陈喆鹏
资深光能
资深光能

此网站不适合提问与算法有关的任何问题

0
陆麟瑞
陆麟瑞
资深天翼
资深天翼

好吧我又犯了一个傻*错误,求和时懒标记判断错了。

 

QAQ我太弱

0
栾峻岩
栾峻岩
初级天翼
初级天翼

您好,您为什么要强调您是一位刚学OI的萌新呢?(又是一个“刚学OI”的巨佬)

 

在洛谷AC790题,随随便便切紫题,蓝题的巨佬,吊打酷町堂众多祖国的花朵的巨佬您根本不可能是萌新!

 

巨佬装弱要严惩!(自洛谷众多巨佬“刚学OI”后,陆巨佬也加入了“刚学OI”团队……)

栾峻岩在2018-10-02 11:49:38追加了内容

您问的问题只能问葛老师,杨老师等……(包括洛谷超级超级巨佬)

您错在哪……反正我看“线段树”就一脸懵逼。

0
0
0
0
我要回答