树状数组区间求和P3374
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e5+10;
int n,m;
struct BIT
{
int lim,tre[N];
inline int lowbit(int x){return x&(-x);}
inline void insert(int x,int val){for(int i=x;i<=lim;i+=lowbit(i))tre[i]+=val;}
inline int query(int x){int temp=0;for(int i=x;i>0;i-=lowbit(i))temp+=tre[i];return temp;}
inline int query(int l,int r){return query(r)-query(l-1);}
}T;
inline int read()
{
int x=0,f=1; char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*f;
}
#undef int
int main()
{
#define int long long
T.lim=n=read(); m=read();
for(int i=1,x;i<=n;i++) x=read(),T.insert(i,x);
for(int i=1,opt,x,y;i<=m;i++)
{
opt=read(); x=read(); y=read();
if(opt==1) T.insert(x,y);
else printf("%lld\n",T.query(x,y));
}
return 0;
}
树状数组区间加P3368
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e5+10;
int n,m;
struct BIT
{
int lim,tre[N];
inline int lowbit(int x){return x&(-x);}
inline void insert(int x,int val){for(int i=x;i<=lim;i+=lowbit(i))tre[i]+=val;}
inline void insert(int l,int r,int val){insert(l,val);insert(r+1,-val);}
inline int query(int x){int temp=0;for(int i=x;i>0;i-=lowbit(i))temp+=tre[i];return temp;}
}T;
inline int read()
{
int x=0,f=1; char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*f;
}
#undef int
int main()
{
#define int long long
T.lim=n=read(); m=read();
for(int i=1,x;i<=n;i++) x=read(),T.insert(i,i,x);
for(int i=1,opt,x,y,k;i<=m;i++)
{
opt=read(); x=read();
if(opt==1) y=read(),k=read(),T.insert(x,y,k);
else printf("%lld\n",T.query(x));
}
return 0;
}
标签:ch,return,int,lowbit,代码,long,康复训练,inline
From: https://www.cnblogs.com/Varuxn/p/17697850.html