nyoj 123士兵杀敌(四)
2014-11-22 23:16
253 查看
题目大意:1~M个士兵,初始的时候,每个人的军工都是零,动态连续增加军工,动态查询某个人的军工!!
思路:由于是动态的,连续插入,单个查询,是典型的插线问点树状数组!!!
对于树状数组的lowBit()、update()和getSum(),多了也就理解了,南阳理工的一些列的《士兵杀敌》做完,理解会更好!
思路:由于是动态的,连续插入,单个查询,是典型的插线问点树状数组!!!
对于树状数组的lowBit()、update()和getSum(),多了也就理解了,南阳理工的一些列的《士兵杀敌》做完,理解会更好!
import java.io.BufferedInputStream; import java.util.Scanner; public class Main { static int[] arr = new int[1000005]; static int len; public static void main(String[] args) { Scanner sc = new Scanner(new BufferedInputStream(System.in)); int cases; String str; cases = sc.nextInt(); len = sc.nextInt(); while (cases-- > 0) { str = sc.next(); if (str.charAt(0) == 'A') {//看java源码,这个效率高! int start = sc.nextInt(); int end = sc.nextInt(); int add = sc.nextInt(); update(start, add); update(end + 1, -add);//插线问点,前面增加add,后面要去掉! } else { System.out.println(getNum(sc.nextInt())); } } sc.close(); } static int lowBit(int x) { return -x & x; } static void update(int x, int add) { while (x <= len) { arr[x] += add; x += lowBit(x); } } static int getNum(int x) { int sum = 0; while (x > 0) { sum += arr[x]; x -= lowBit(x); } return sum; } }
相关文章推荐
- nyoj123 士兵杀敌(四) 树状数组之插线问点
- nyoj123 士兵杀敌(四) (线段树)
- nyoj 123 士兵杀敌(四)(树状数组——插线问点)
- ♥NYOJ 123-士兵杀敌(四)【线段树&&树状数组】
- NYOJ 123 士兵杀敌(四)
- nyoj 123 士兵杀敌(四)(树状数组——插线问点)
- nyoj 123 士兵杀敌(四) 插线问点
- hdu-1556 Color the ball && nyoj -123 士兵杀敌(四)----------》树状数组
- nyoj123 士兵杀敌(四)
- nyoj 123 士兵杀敌(四)(树状数组——插线问点)
- nyoj 123 士兵杀敌(四)
- nyoj123——士兵杀敌(四)
- NYOJ 123士兵杀敌(四)(树状数组)(插线问点)
- nyoj123士兵杀敌(四)树状数组
- nyoj123 士兵杀敌(四)树状数组 插线问点
- nyoj 123 士兵杀敌(四)(树状数组——插线问点)
- nyoj123士兵杀敌4-树状数组-改区间查点
- NYOJ-123-士兵杀敌(四)
- nyoj 123 士兵杀敌(四)(树状数组——插线问点)
- nyoj 题目123 士兵杀敌(四)