http://acm.hdu.edu.cn/showproblem.php?pid=4031

用了树状数组的区间更新 单点查找(一般为单点更新 区间查找)

例如 区间(2,4)加1

则Updata(2,1)   Updata(4+1,-1)

实现了更新(2,4)的值而不改变其他值

求Sum时即可得到某一点的值

View Code

#include <iostream>
using namespace std;
const int MAX = 20000 + 100;
int C[MAX];
int N;
struct Node
{int l;int r;
};
int LowBit(int x)
{return x & (-x);
}
void Update(int num,int key)
{while(num <= N){C[num] += key;num += LowBit(num);}
}int CalSum(int num)
{int sum = 0;while(num > 0){sum += C[num];num -= LowBit(num);}return sum;
}
int main()
{int T;cin>>T;int Case = 0;while(T--){int Q;//操作数量int CD;//护盾冷却时间int time = 0;//当前经过时间int used_time[MAX] = {0};//记录护盾什么时候进入冷却int porected[MAX] = {0};//记录保护次数Node attack[MAX] = {0};//定义结构体,记录攻击的位置memset(C,0,sizeof(C));Case++;cout<<"Case "<<Case<<":"<<endl;scanf("%d%d%d",&N,&Q,&CD);int i;for(i=0;i<Q;i++){char str[20];scanf("%s",str);if(str[0] == 'A'){scanf("%d%d",&attack[time].l,&attack[time].r);Update(attack[time].l,1);Update(attack[time].r+1,-1);time++;}else{int num;scanf("%d",&num);int i;for(i = used_time[num] ; i< time ;i++)//每一次询问计算被保护的次数
                {if(attack[i].l <=num    && num <= attack[i].r ){porected[num]++;used_time[num] = i + CD;i = i + CD - 1;}}printf("%d\n",CalSum(num)-porected[num]);//成功攻击次数= 总攻击数 - 被保护次数
            }}}return 0;
}

转载于:https://www.cnblogs.com/zxotl/archive/2012/11/10/2764340.html

HDU ACM 4031 Attack (树状数组--单点查询+区间更新)相关推荐

  1. Assign the task HDU - 3974(线段树+dfs建树+单点查询+区间修改)

    题意: 染色问题:给一个固定结构的树,现在有两个操作: (1) y 将结点x及其所有后代结点染成颜色y: (2)查询结点x当前的颜色. 其实就是区间染色问题,不过需要dfs预处理, 题目: There ...

  2. hdu 4417 Super Mario 树状数组||主席树

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Prob ...

  3. hdu2642二维树状数组单点更新+区间查询

    http://acm.hdu.edu.cn/showproblem.php?pid=2642 题目大意:一个星空,二维的.上面有1000*1000的格点,每个格点上有星星在闪烁.一开始时星星全部暗淡着 ...

  4. hdu 4267 多维树状数组

    题意:有一个序列 "1 a b k c" means adding c to each of Ai which satisfies a <= i <= b and (i ...

  5. hdu 4125 Moles(kmp+树状数组)

    题目链接:hdu 4125 Moles 题意: 给你n个数,让你按键值建一个平衡二叉树,然后奇数为0,偶数为1,然后可以遍历这颗树得到一个欧拉序列,现在给你一个串,问你出现了几次. 题解: 建树的时候 ...

  6. hdu 1892二维树状数组

    这题我知道是用树状数组,可是好久没打树状数组了,就想用普通方法水过去~~结果--结果--水了好多方法都水不过,出题人真狠呐--我的水方法是对于每一次查询,初始化ans=(x2-x1+1)*(y2-y1 ...

  7. HDU 1556 前缀和 树状数组 线段树

    解法一: a[i]表示以 i作为起点,对 i-n的气球全部上色的次数  对(start,end)区间上色 ++a[start] --a[end+1]抵消掉 end+1-n的部分 问题转换为求 a的前缀 ...

  8. HDU - 5775 Bubble Sort(树状数组)

    题目链接:点击查看 题目大意:给出n个数,求出按照冒泡排序期间每个数可以到达的最右边位置和最左边位置的差 题目分析:其实这个题想明白了就很简单了,先用辅助数组a按照顺序存储每一个数,a[i]就代表排序 ...

  9. P3368 【模板】树状数组 2(区间修改单点查询)

    这是树状数组的基础操作,和差分结合在一起,其实这种操作我更习惯于线段树的写法.不过树状数组代码短,执行效率高,值得记录一下. #include<bits/stdc++.h> #define ...

最新文章

  1. 我对序列化(Serializable)的理解
  2. 20155227 2016-2017-2 《Java程序设计》第九周学习总结
  3. 微型计算机的评估指标,T∕CECA-G 0060-2020 “领跑者”标准评价要求 微型计算机(9页)-原创力文档...
  4. iscsi介绍及iscsi target配置
  5. vue插件:vue-resource的使用笔记
  6. 论文浅尝 | BERT:Pre-training of Deep Bidirectional Transformers
  7. windows 显示苹果分区_基准测试数据显示苹果M1运行Windows的表现比微软自家硬件好上近一倍...
  8. 120 -算法 - 枚举 数学类 4138:质数的和与积
  9. @程序员,技术债你还清了吗?
  10. puppet报告系统 dashboard
  11. WINDOWS XP优化批处理
  12. 操作系统——信号量机制(PV操作)
  13. isupper函数和isdigit函数
  14. mysql 蚂蚁金服_面试蚂蚁金服,首战被MySQL惨虐,熬夜啃透这份阿里面经复盘一个月再战拿下P7offer...
  15. 嵌入式Linux——学习经历
  16. 中文新闻分类 数据集_NLP-新闻文本分类实战
  17. 关于计网的一点复习资料
  18. ins是什么与Instagram有什么区别
  19. 深入理解java虚拟机-java虚拟机的
  20. 学术-物理:莫比乌斯带

热门文章

  1. softmax ce loss_神经网络中的蒸馏技术,从Softmax开始说起
  2. mvn test BUILD FAILURE
  3. 010_TreeMap键使用Comparator排序
  4. 013_logback中的SyslogAppender
  5. 008_Gson从序列化中排除字段
  6. 008_Restfull请求风格
  7. fpga驱动rgb液晶屏_正点原子开拓者FPGA开发板资料连载第五十四章基于的数字识别实验...
  8. 产品经理入门——PM
  9. 怎样把一个项目加入微服务器,构建微服务:快速搭建Spring Boot项目
  10. php单屏网站源码,关于原生js实现类似fullpage的单页/全屏滚动的方法