题意:

N个工兵营地。工兵营地里的人数分别为:a1,a2,....aN

Add i,j:第i个工兵营地里增加j人

Sub i,j:第i个工兵营地里减少j人

Query i,j:查询第i个第j个工兵营地共有多少人

思路:

线段树、树状数组都可以做,看代码

代码:

线段树:

const int maxn = 50005;
int sum[maxn<<2]; void PushUp(int rt){
sum[rt] = sum[rt<<1] + sum[rt<<1|1];
} void build(int l,int r,int rt){
if(l==r){
scanf("%d",&sum[rt]);
return;
}
int m = (l + r) >> 1;
build(lson);
build(rson);
PushUp(rt);
} void update(int p,int add,int l,int r,int rt){
if(l==r){
sum[rt] += add;
return;
}
int m = (l + r) >> 1;
if(p <= m) update(p,add,lson);
else update(p,add,rson);
PushUp(rt);
} int query(int L,int R,int l,int r,int rt){
if(L<=l && r<=R){
return sum[rt];
}
int m = (l + r) >> 1;
int ret = 0;
if(L <= m) ret += query(L,R,lson);
if(R > m) ret += query(L,R,rson);
return ret;
} int main(){ int T,n; scanf("%d",&T);
for(int t=1;t<=T;++t){ printf("Case %d:\n",t); scanf("%d",&n);
build(1,n,1); char op[10];
while(scanf("%s",op)){
if(op[0] == 'E') break;
int a, b;
scanf("%d%d",&a,&b);
if(op[0] == 'A') update(a,b,1,n,1);
else if(op[0] == 'S') update(a,-b,1,n,1);
else if(op[0] == 'Q') printf("%d\n",query(a,b,1,n,1));
} } }

树状数组:

int n;
int a[50005];
int C[50005]; void init(){
rep(i,1,n){
C[i]=0;
for(int j=i-lowbit(i)+1;j<=i;j++){
C[i]+=a[j];
}
}
}
void add(int x,int y){
for(int i=x;i<=n;i+=lowbit(i)){
C[i]+=y;
}
} int calc(int x){
if(x==0) return 0;
int ans=0;
for(int i=x;i>0;i-=lowbit(i))
ans+=C[i];
return ans;
}
int query(int x,int y){
return calc(y)-calc(x-1);
} int main(){ int T;
cin>>T;
rep(t,1,T){
scanf("%d",&n);
rep(i,1,n){
scanf("%d",&a[i]);
} init(); printf("Case %d:\n",t); char ope[10];
while(1){
scanf("%s",ope);
if(ope[0]=='E') break;
int x,y;
if(ope[0]=='A'){
scanf("%d%d",&x,&y);
add(x,y);
}
else if(ope[0]=='S'){
scanf("%d%d",&x,&y);
add(x,-y);
}
else{
scanf("%d%d",&x,&y);
int ans=query(x,y);
printf("%d\n",ans);
}
}
} return 0;
}

最新文章

  1. Javascript初学篇章_7(DOM)
  2. C++ dynamic_cast对指针类型的转换
  3. &lt;2016-1-28&gt;
  4. echarts 折线图动态x轴及数据
  5. Play Framework安装和配置
  6. 按要求编写Java应用程序。 (1)创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)、减速(车速自减)、修改车牌号,查询车的载重量。 编写两个构造方法:一个没有形参,在方法中将车牌号设置“XX1234”,速 度设置为100,载重量设置为100;另一个能为对象的所有属性赋值; (2)创建主类: 在主类中创建两个机动车对象。 创建第
  7. ios initialize和init等方法
  8. ie8下table的colspan属性与max-with属性的显示错乱问题
  9. jsp标准标签库
  10. ORACLE no1 存储过程插入更新表数据
  11. HTML&amp;CSS基础学习笔记1.12—引入样式表
  12. UESTC_温泉旅店 CDOJ 878
  13. TIANKENG’s restaurant--hdu4883
  14. 将 jsp 页面的值 传到struts2 action中(不是表单中的值)
  15. PAT (Advanced Level) 1108. Finding Average (20)
  16. JSON依赖的选择
  17. List迭代过滤操作注意点
  18. mysql 设置允许重试,批量更新
  19. centOS --- 安装最新版的node nodejs
  20. 在 Visual Studio 生成项目时,会发现一些 dll 并没有被复制到输出目录,导致最终程序的执行错误

热门文章

  1. Django学习day12随堂笔记
  2. js不记录某个url链接历史访问,返回时不返回该链接
  3. webpack4. 使用autoprefixer 无效
  4. Appium自动化测试时为什么要自己封装find方法
  5. django 使用装饰器验证用户登陆
  6. P7443-加边【博弈论】
  7. Java实现四大基本排序算法和二分查找
  8. 数据库的高可用MHA实验步骤
  9. 倒计时 | 7.24 阿里云 Serverless Developer Meetup 杭州站报名火热进行中!
  10. ASP.NET Core Filter与IOC的羁绊