zoukankan      html  css  js  c++  java
  • 线段树维护单点修改区间和

    直接上代码吧

    范围n,m<=10510^5

    C是修改,Q是查询

    #include<bits/stdc++.h>
    using namespace std;
    #define lc (u<<1)
    #define rc ((u<<1)+1)
    #define mid ((l+r)>>1)
    int t[400050],n,m,x,y;
    inline int read(){
    	char ch=getchar();
    	int res=0,zgs=1;
    	while(!isdigit(ch)) {if(ch=='-') zgs=-1;ch=getchar();	}
    	while(isdigit(ch)) res=(res<<3)+(res<<1)+(ch^48),ch=getchar();
    	return res*zgs;
    }
    inline void pushdown(int u,int l,int r,int k,int v)
    {
    	if(l==r)
    	{
    		if(l==k)
    		t[u]+=v;
    		return;
    	}
    	t[u]+=v;
    	if(mid>=k)
    	pushdown(lc,l,mid,k,v);
    	if(mid<k)
    	{
    		pushdown(rc,mid+1,r,k,v);
    	}
    }
    inline int query(int u,int l,int r,int st,int des)
    {
    	int ans=0;
    	if(l>=st&&r<=des)
    	{
    		return t[u];
    	}
    	if(l>des||r<st)
    	{
    		return 0;
    	}
    	if(l==r)
    	{
    		return t[u];
    	}
    	if(mid<st)
    	{
    		return query(rc,mid+1,r,st,des);
    	}
    	if(des<=mid)
    	{
    		return query(lc,l,mid,st,des);
    	}
    	ans+=query(lc,l,mid,st,des);
    	ans+=query(rc,mid+1,r,st,des);
    	return ans;
    }
    int main(){
    	n=read(),m=read();
    	char c;
    	for(int i=1;i<=m;i++)
    	{
    		cin>>c;
    		if(c=='C')
    		{
    			x=read(),y=read();
    			pushdown(1,1,n,x,y);
    		}
    		else if(c=='P')
    		{
    			x=read(),y=read();
    			cout<<query(1,1,n,x,y)<<'
    ';
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    React Native ios打包
    ReactNative state更新,视图不更新的问题
    XF警告试图
    XF 彩色矩形块
    XF 定制图片
    XF 通过判断平台加载不同的图片
    XF 进度条和指示器
    XF 滑块和步进控件
    XF 开关控件
    XF 按钮控件
  • 原文地址:https://www.cnblogs.com/forever-/p/9736066.html
Copyright © 2011-2022 走看看