zoukankan      html  css  js  c++  java
  • 洛谷P3368树状数组2


    基本思路,使用差分数组 arr[i]=a[i]-a[i-1];

    #include<bits/stdc++.h>
    #define maxn 1000000
    using namespace std;
    int arr[maxn],n;
    int lowbit(int x)
    {
    	return x&(-x);
    }
    void add(int x,int d)
    {
    	while(x<=n)
    	{
    		arr[x]+=d;x+=lowbit(x);
    	}
    }
    void range_add(int x,int y,int d)
    {
    	add(x,d);
    	add(y+1,-d);
    }
    int sum(int x)
    {
    	int ans=0;
    	while(x>0)
    	{
    		ans+=arr[x];x-=lowbit(x);
    	}
    	return ans;
    }
    int main()
    {
    	int m;cin>>n>>m;int now,pre=0;
    	for(int i=1;i<=n;i++)
    	{//差分
    		cin>>now;
    		add(i,now-pre);
    		pre=now;
    	}
    	for(int i=1;i<=m;i++)
    	{
    		int op,x,y,k;
    		cin>>op;
    		if(op==1)
    		{
    			cin>>x>>y>>k;
    			range_add(x,y,k);
    		}
    		else {
    			cin>>x;
    			cout<<sum(x)<<endl;
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    Linux
    Python
    Linux
    Python
    爬虫
    WEB
    法正(13):密谋
    法正(12):张松
    法正(11):入川
    法正(10):袍哥
  • 原文地址:https://www.cnblogs.com/tldr/p/10897574.html
Copyright © 2011-2022 走看看