P3353 在你窗外闪耀的星星————树状数组,前缀和

    xiaoxiao2023-11-23  145

    题解:本题主要考查树状数组的区间之和的最大值,用树状数组和前缀和(注意:一个位子可以放多个点) 代码如下:

    #include<iostream> #include<algorithm> #include<cstdio> using namespace std; int n,m,a,b,maxn=-123456; int tree[2342567]; int lowbit(int k) { return k&-k; } void add(int x,int k) { while(x<=n) { tree[x]+=k; x+=lowbit(x); } } int sum(int x) { int ans=0; while(x>0) { ans+=tree[x]; x-=lowbit(x); } return ans; } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { cin>>a>>b;add(a,b); } for(int i=m;i<=n;i++) maxn=max(maxn,sum(i-1)-sum(i-m-1)); cout<<maxn; cin>>n; return 0; }
    最新回复(0)