基础线段树

  1. #include<cstdio>
  2. #include<iostream>
  3. using namespace std;
  4. int n,p,a,b,m,x,y,ans;
  5. struct node
  6. {
  7. int l,r,v,f;
  8. }tree[400001];
  9. void build(int k,int l,int r)//建树
  10. {
  11. tree[k].l=l,tree[k].r=r;
  12. if(tree[k].l==tree[k].r)
  13. {
  14. scanf("%d",&tree[k].v);
  15. return;
  16. }
  17. int m=(l+r)/2;
  18. build(k*2,l,m);
  19. build(k*2+1,m+1,r);
  20. tree[k].v=tree[k*2].v+tree[k*2+1].v;
  21. }
  22. void down(int k)//标记下传
  23. {
  24. tree[k*2].f+=tree[k].f;
  25. tree[k*2+1].f+=tree[k].f;
  26. tree[k*2].v+=tree[k].f*(tree[k*2].r-tree[k*2].l+1);
  27. tree[k*2+1].v+=tree[k].f*(tree[k*2+1].r-tree[k*2+1].l+1);
  28. tree[k].f=0;
  29. }
  30. int ask_point(int k,int x)//单点查询
  31. {
  32. if(tree[k].l==tree[k].r)
  33. {
  34. return tree[k].v;
  35. }
  36. if(tree[k].f) down(k);
  37. int m=(tree[k].l+tree[k].r)/2;
  38. if(x<=m) ask_point(k*2,x);
  39. else ask_point(k*2+1,x);
  40. }
  41. void change_point(int k,int x,int v)//单点修改
  42. {
  43. if(tree[k].l==tree[k].r)
  44. {
  45. tree[k].v+=v;
  46. return;
  47. }
  48. if(tree[k].f) down(k);
  49. int m=(tree[k].l+tree[k].r)/2;
  50. if(x<=m) change_point(k*2,x,v);
  51. else change_point(k*2+1,x,v);
  52. tree[k].v=tree[k*2].v+tree[k*2+1].v;
  53. }
  54. void ask_interval(int k,int a,int b)//区间查询
  55. {
  56. if(tree[k].l>=a&&tree[k].r<=b)
  57. {
  58. ans+=tree[k].v;
  59. return;
  60. }
  61. if(tree[k].f) down(k);
  62. int m=(tree[k].l+tree[k].r)/2;
  63. if(a<=m) ask_interval(k*2,a,b);
  64. if(b>m) ask_interval(k*2+1,a,b);
  65. }
  66. void change_interval(int k,int a,int b,int v)//区间修改
  67. {
  68. if(tree[k].l>=a&&tree[k].r<=b)
  69. {
  70. tree[k].v+=(tree[k].r-tree[k].l+1)*v;
  71. tree[k].f+=v;
  72. return;
  73. }
  74. if(tree[k].f) down(k);
  75. int m=(tree[k].l+tree[k].r)/2;
  76. if(a<=m) change_interval(k*2,a,b,v);
  77. if(b>m) change_interval(k*2+1,a,b,v);
  78. tree[k].v=tree[k*2].v+tree[k*2+1].v;
  79. }
  80. int main()
  81. {
  82. int cas;cin>>cas;
  83. int flag=0;
  84. while(cas--)
  85. { printf("Case %d:\n",++flag);
  86. int n;scanf("%d",&n);
  87. build(1,1,n);
  88. char s[2000];
  89. int x,y;
  90. while(scanf("%s",s)==1)
  91. { ans=0;
  92. if(s[0]=='E')break;
  93. scanf("%d%d",&x,&y);
  94. if(s[0]=='A')change_point(1,x,y);
  95. if(s[0]=='S')change_point(1,x,-y);
  96. if(s[0]=='Q'){ask_interval(1,x,y);printf("%d\n",ans);}
  97. }
  98. }
  99. return 0;
  100.  
  101.  
  102. }

树状数组

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int c[];
  5. int n;
  6. int lowbit(int i)
  7. {
  8. return i&-i;
  9. }
  10. void update(int i,int val)
  11. {
  12. while(i<=n)
  13. {
  14. c[i]+=val;
  15. i+=lowbit(i);
  16. }
  17. }
  18. int sum(int i)
  19. {
  20. int ans=;
  21. while(i>)
  22. {
  23. ans+=c[i];
  24. i-=lowbit(i);
  25. }
  26. return ans;
  27. }
  28.  
  29. int main()
  30. {
  31. int cas;cin>>cas;
  32. for(int k=;k<=cas;k++)
  33. {
  34. memset(c,,sizeof(c));
  35. cin>>n;
  36. for(int i=;i<=n;i++)
  37. {
  38. int x;scanf("%d",&x);
  39. update(i,x);
  40. }
  41. printf("Case %d:\n",k);
  42. char s[];
  43. while(scanf("%s",s)==)
  44. {
  45. if(s[]=='E')break;
  46. int a,b;scanf("%d%d",&a,&b);
  47. if(s[]=='A')update(a,b);
  48. if(s[]=='S')update(a,-b);
  49. if(s[]=='Q')printf("%d\n",sum(b)-sum(a-));
  50.  
  51. }
  52.  
  53. }
  54.  
  55. }

敌兵布阵 HDU1166的更多相关文章

  1. 敌兵布阵hdu1166

    /* 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  2. 敌兵布阵-HDU1166 点修改+区间查询

    题目:C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况 ...

  3. (线段树)敌兵布阵--hdu--1166 (入门)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1166 自己第一次在没有看题解AC出来的线段树,写的可能不是太好,再贴个学长的代码,学习一下 发现自己的U ...

  4. 暑假集训(2)第四弹 ----- 敌兵布阵(hdu1166)

    D - 敌兵布阵 Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit ...

  5. hdu1166敌兵布阵

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. hdu1166 敌兵布阵

    敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动 ...

  7. 线段树 HDU-1166 敌兵布阵

    敌兵布阵是一个线段树典题,题目如下(点此查看题目出处): Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国 ...

  8. HDU-1166敌兵布阵(线段树)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...

  9. hdu1166 敌兵布阵(线段树 求区间和 更新点)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

随机推荐

  1. Listbox的操作,数据源变化时要及时更新listbox要先把数据源置空,在给数据源绑定数据

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. Nginx PHP支持

    Nginx 支持 PHP server { server_name www.www1.com www1.com; location / { index index.php index.html; ro ...

  3. Python的虚拟环境virtualenv

    原文地址:blog.sina.com.cn/s/blog_4ddef8f80101eu0w.html Python的虚拟环境可以使一个Python程序拥有独立的库library和解释器interpre ...

  4. python - 计算器 程序练习

    v1.0 计算器(数据内不含括号方式:) import re def jisuan(a,b,c): sun_count = 0 if c =="+": sun_count = st ...

  5. SpringBoot扩展SpringMVC自动配置

    SpringBoot中自动配置了 ViewResolver(视图解析器) ContentNegotiatingViewResolver(组合所有的视图解析器) 自动配置了静态资源文件夹.静态首页.fa ...

  6. Python中的exec、eval使用实例

    Python中的exec.eval使用实例 这篇文章主要介绍了Python中的exec.eval使用实例,本文以简洁的方式总结了Python中的exec.eval作用,并给出实例,需要的朋友可以参考下 ...

  7. saltstack中如何实现多个master来管理minion

    背景: 公司有多个部门,有一些机器有本部门的业务,这些机器也有其他部门的业务,所以本部门需要一个master服务器来管理这批机器,其他部门也需要一个master服务器来管理这个机器,所以就需要多个ma ...

  8. 转载:2.1 运行中的Nginx进程间的关系《深入理解Nginx》(陶辉)

    原文:https://book.2cto.com/201304/19624.html 在正式提供服务的产品环境下,部署Nginx时都是使用一个master进程来管理多个worker进程,一般情况下,w ...

  9. Go语言规格说明书 之 结构体类型(Struct types)

    go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...

  10. Android ImageView 的scaleType 属性图解

    ImageView 是 Android 中最常用的控件之一,而在使用ImageView时,必不可少的会使用到它的scaleType属性.该属性指定了你想让ImageView如何显示图片,包括是否进行缩 ...