2026/4/1 23:48:56
网站建设
项目流程
河南网站平台建设公司,长春是几线城市2020,手机把网站做成软件,常用的网页开发工具P2068 统计和
题目描述
给定一个长度为 n(0≤n≤105)n(0\leq n\leq 10^5)n(0≤n≤105)#xff0c;初始值都为 000 的序列#xff0c;x(0≤x≤105)x(0\leq x\leq 10^5)x(0≤x≤105) 次的修改某些位置上的数字#xff0c;每次加上一个数#xff0c;并在此期间提出 y(0≤y≤10…P2068 统计和题目描述给定一个长度为n(0≤n≤105)n(0\leq n\leq 10^5)n(0≤n≤105)初始值都为000的序列x(0≤x≤105)x(0\leq x\leq 10^5)x(0≤x≤105)次的修改某些位置上的数字每次加上一个数并在此期间提出y(0≤y≤105)y(0\leq y\leq 10^5)y(0≤y≤105)个问题求每段区间的和。输入格式第一行111个整数表示序列的长度nnn。第二行111个整数表示操作的次数w(0≤w≤2×105)w(0\leq w\leq 2\times 10^5)w(0≤w≤2×105)。后面依次是www行分别表示加入和询问操作。其中加入用x表示询问用y表示。xxx的格式为x a b表示在序列上第aaa个数加上bbb。保证1≤a≤n1 \leq a \leq n1≤a≤n1≤b≤1091 \leq b \leq 10^91≤b≤109。yyy的格式为y a b表示询问aaa到bbb区间的加和。保证1≤a≤b≤n1 \leq a \leq b \leq n1≤a≤b≤n。输出格式每行一个正整数分别是每次询问的结果。输入输出样例 #1输入 #15 4 x 3 8 y 1 3 x 4 9 y 3 4输出 #18 17C实现#includebits/stdc.husingnamespacestd;constintN1e5*4;intn,m;longlongtree[N*4];voidchange_point(intk,intl,intr,intx,intv)//单点修改{if(rx||lx)return;//当前区间与原序列的位置完全无交集if(lxrx)//当前结点为对应的叶子结点{tree[k]v;return;}intmid(lr)/2;change_point(k*2,l,mid,x,v);change_point(k*21,mid1,r,x,v);//修改右子区间tree[k]tree[k*2]tree[k*21];//更新相关的值}longlongsearch(intk,intl,intr,intx,inty){if(yl||xr)return0;//当前区间与原序列的位置完全无交集,返回一个不影响答案的值if(lxry)returntree[k];//询问区间在当前区间返回维护好的值intmid(lr)/2;returnsearch(k*2,l,mid,x,y)search(k*21,mid1,r,x,y);}intmain(){scanf(%d %d,n,m);for(inti1;im;i){charc;intx,y;cincxy;if(cx)change_point(1,1,n,x,y);//单点修改if(cy)printf(%lld\n,search(1,1,n,x,y));//区间查询}return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容