线段树模板-敌兵布阵 HDU - 1166

线段树模板-敌兵布阵 HDU - 1166,第1张

概述模板题. #include <bits/stdc++.h>using namespace std;const int maxn=2e5+10;int s[maxn];int a[maxn];void built_tree(int start,int end,int node){ if(start==end) {

模板题.

#include <bits/stdc++.h>using namespace std;const int maxn=2e5+10;int s[maxn];int a[maxn];voID built_tree(int start,int end,int node){        if(start==end)        {                scanf("%d",&s[node]);                return;        }        int mID=(start+end)/2;        int left_node=2*node+1;        int right_node=2*node+2;        built_tree(start,mID,left_node);        built_tree(mID+1,end,right_node);        s[node]=s[left_node]+s[right_node];}voID updata_stree(int start,int node,int dex,int val){        if(start==end)        {                s[node]+=val;                return;        }        int mID=(start+end)/2;        int left_node=2*node+1;        int right_node=2*node+2;        if(dex<=mID){                updata_stree(start,left_node,dex,val);        }        else{                updata_stree(mID+1,right_node,val);        }        s[node]=s[left_node]+s[right_node];}int query_stree(int start,int L,int R){        if(R<start||L>end)        {                return 0;        }        else if(L<=start&&end<=R)        {                return s[node];        }        else if(start==end){                return s[node];        }        int mID=(start+end)/2;        int left_node=node*2+1;        int right_node=node*2+2;        int sum_left=query_stree(start,L,R);        int sum_right=query_stree(mID+1,R);        return sum_left+sum_right;}int main(){        int T;        scanf("%d",&T);        int flag=1;        while(T--)        {                int n;                scanf("%d",&n);                built_tree(0,n-1,0);                string x;                printf("Case %d:\n",flag++);                while(cin>>x)                {                        if(x=="End")                                break;                        if(x[0]==Q){                                int u,v;                                scanf("%d%d",&u,&v);                                //cout<<"u="<<u<<endl;                                //cout<<"v="<<v<<endl;                                cout<<query_stree(0,0,u-1,v-1)<<endl;                        }                        else if(x[0]==A){                                int dex,val;                                scanf("%d%d",&dex,&val);                                //cout<<"dex="<<dex<<endl;                                //cout<<"val="<<val<<endl;                                updata_stree(0,dex-1,val);                        }                        else if(x[0]==S){                               int dex,dex-1,-val);                        }                }        }    return 0;}
VIEw Code 总结

以上是内存溢出为你收集整理的线段树模板-敌兵布阵 HDU - 1166全部内容,希望文章能够帮你解决线段树模板-敌兵布阵 HDU - 1166所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1228621.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存