zoukankan      html  css  js  c++  java
  • P2023 [AHOI2009] 维护序列

    链接:Miku


    和[线段树2](https://www.luogu.com.cn/problem/P3373)

    一样的题

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #define int long long 
    using namespace std;
    int n,mod;
    int tree[400001];
    int lazya[400001],lazym[400001];
    int m;
    int sum[400001];
    int f,t,g,c; 
    void pushup(int x){
    	sum[x]=sum[x<<1]%mod+sum[x<<1|1]%mod;
    	sum[x]%=mod;
    	return ; 
    } 
    void pushdown(int x,int l,int r){
    	if(lazym[x]!=1){
    		lazym[x<<1]*=lazym[x]%mod;lazym[x<<1|1]*=lazym[x]%mod;
    		lazym[x<<1]%=mod;lazym[x<<1|1]%=mod;
    		sum[x<<1]*=lazym[x]%mod;sum[x<<1|1]*=lazym[x]%mod;
    		sum[x<<1]%=mod;sum[x<<1|1]%=mod;
    		lazya[x<<1]*=lazym[x]%mod;lazya[x<<1|1]*=lazym[x]%mod;
    		lazya[x<<1]%=mod;lazya[x<<1|1]%=mod;
    		lazym[x]=1;
    	}
    	if(lazya[x]){
    		int mid=(l+r)>>1;
    		lazya[x<<1]+=lazya[x]%mod;lazya[x<<1|1]+=lazya[x]%mod;
    		sum[x<<1]+=lazya[x]*(mid-l+1);
    		sum[x<<1]%=mod;
    		sum[x<<1|1]+=lazya[x]*(r-mid);
    		sum[x<<1|1]%=mod;
    		lazya[x<<1]%=mod;lazya[x<<1|1]%=mod;
    		lazya[x]=0;
    	}
    	return ;
    }
    void update1(int x,int l,int r,int L,int R,int ad){
    	if(L<=l&&r<=R){
    		lazya[x]+=ad;
    		lazya[x]%=mod;
    		sum[x]+=(r-l+1)*ad;
    		sum[x]%=mod;
    		return ; 
    	}
    	pushdown(x,l,r);
    	int mid=(r+l)>>1;
    	if(L<=mid) update1(x<<1,l,mid,L,R,ad);
    	if(R>mid) update1(x<<1|1,mid+1,r,L,R,ad);
    	pushup(x);
    	return ;	
    }
    void update2(int x,int l,int r,int L,int R,int ad){
    	if(L<=l&&r<=R){
    		lazym[x]*=ad;
    		lazym[x]%=mod;
    		lazya[x]*=ad;
    		lazya[x]%=mod;
    		sum[x]*=ad;
    		sum[x]%=mod;
    		return ; 
    	}
    	pushdown(x,l,r);
    	int mid=(r+l)>>1;
    	if(L<=mid) update2(x<<1,l,mid,L,R,ad);
    	if(R>mid) update2(x<<1|1,mid+1,r,L,R,ad);
    	pushup(x);
    	return ;	
    }
    int query(int x,int l,int r,int L,int R){
    	if(L<=l&&r<=R){
    		return sum[x]%=mod;
    	}
    	pushdown(x,l,r);
    	int mid=(r+l)>>1;
    	int ans=0;
    	if(L<=mid) ans+=query(x<<1,l,mid,L,R),ans%=mod;
    	if(R>mid) ans+=query(x<<1|1,mid+1,r,L,R),ans%=mod;
    	return ans%=mod;
    } 
    signed main(){
    	scanf("%lld%lld",&n,&mod);
    	for(int i=1;i<=400001;++i)
    	lazym[i]=1;
    	for(int i=1;i<=n;++i){
    		scanf("%lld",&m);
    		update1(1,1,n,i,i,m);
    	}
    	scanf("%lld",&m);
    	for(int i=1;i<=m;++i){
    		scanf("%lld",&f);
    		if(f==2){
    			scanf("%lld%lld%lld",&t,&g,&c);
    			update1(1,1,n,t,g,c);
    		}
    		if(f==1){
    			scanf("%lld%lld%lld",&t,&g,&c);
    			update2(1,1,n,t,g,c);
    		}
    		if(f==3){
    			scanf("%lld%lld",&t,&g);
    			cout<<query(1,1,n,t,g)%mod<<endl;;
    		}
    	} 
    	return 0;
    } 
    
  • 相关阅读:
    wordpress取文章时间
    一个链接引发的血案---------服务器 IO及网络流量暴涨解决历程
    wordpres 自定义comment样式
    HTML中head里的内容经浏览器解析后全到body里了
    mir9-lua——《热血沙城》45度ARPG手游-Lua移植版
    MoonWarriors-lua——《雷电战机》游戏-Lua移植版
    《QQ欢乐斗地主》山寨版
    最好的ie版本检测方式
    css 超出部分显示省略号
    分享一个jquery插件,弥补一下hover事件的小小不足
  • 原文地址:https://www.cnblogs.com/For-Miku/p/13658324.html
Copyright © 2011-2022 走看看