青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

M.J的blog

algorithm,ACM-ICPC
隨筆 - 39, 文章 - 11, 評論 - 20, 引用 - 0
數據加載中……

Binary Indexed Tree-樹狀數組【TOJ 3505】

     TOJ有道題,大意是有N個位置,每個位置有若干瓶子,Mike很淘氣,他每次會增加或減少位置i的瓶子數,然后有M次詢問,求位置A到B的瓶子數的和。最開始,我一直用最直觀的做法,但是由于是O(n)的復雜度,所以一直超時。今天看了BIT的相關東西,才發現那個題其實是典型的BIT題目,而且是最基礎的,但是就和RMQ問題一樣,高效的算法背后深刻的數學理論還是不能很透徹的理解,這個只有靠以后熟練的慢慢來了:D

                        

     先來看一下樹狀數組的概念:樹狀數組是一種靜態樹狀數據結構,它的首要作用是維護前綴和,即改變數組中某一元素a[i]的值,若要詢問前N項的和,樹狀數組便可完美解決。時間復雜度O(logn)。
     先來直觀看一下樹狀數組的結構(圖片來自http://fqq11679.blog.hexun.com/21722866_d.html#
                 
     在上圖中,紅色的數組c[]便是樹狀數組。改變數組a的某一個元素i,則需要相應的改變數組c,若要詢問前N項和,只需累加相應的c,而這當中一個核心的問題便是相應的數組c的下標問題。可以用位操作lowbit解決。c[i]=a[i-2^k+1]到a[i]的和,k是指i用二進制表示時末位0的個數,即將i表示成冪方和后最小的指數。利用位運算,我們可以得知2^k=i&(i^(i-1));
相應的代碼為:
1 int lowbit(int n)
2 {
3     return n&(n^(n-1));
4 }

這樣,當a[i]改變時,我們只需從c[i]開始一直向上回溯,改變路上相應的數組c的值,若要求前N項和,只需求N以前所有最大子樹c[]的和。然后我們來看相應下標的操作:
              修改a[i],則修改一路的父節點c[p], p=i-bit(i);

若要前i項求和,只需一路找子節點c[p],  p=i-lowbit(i);

求前N項和:
1 int sum(int n)
2 {
3     int total=0;
4     while(n>0){
5         total+=c[n];
6         n-=lowbit(n);
7     }
8     return total;
9 }
TOJ 3505  Naughty mike
Code:
 1 /*TOJ 3505 Naughty mike*/
 2 #include<stdio.h>                          //注意在使用樹狀數組時下標一定不能從0開始
 3 #include<string.h>
 4 #define M 100002
 5 int a[M],n;                
 6 int c[M];
 7 int lowbit(int t)                           //關鍵的位操作確定數組下標
 8 {
 9     return t&(t^(t-1));
10 }
11 int sum(int end)                           //求前end項和的函數,通過不斷累加最大子樹得到
12 {
13     int i;
14     int total=0;
15     while(end>0){
16         total+=c[end];
17         end-=lowbit(end);
18     }
19     return total;
20 }
21 void modify(int t,int key)                 //對數組某一項進行修改時,只需沿該項一直向上回溯修改相應的數組c
22 {
23     while(t<=n){
24         c[t]+=key;
25         t+=lowbit(t);
26     }
27 }
28 int main()
29 {
30     int i,j,k,m,cas;
31     char e[50];
32     scanf("%d",&cas);
33     while(cas--){
34         scanf("%d",&n);
35         memset(c,0,sizeof(c));
36         for(i=1;i<=n;i++){
37             scanf("%d",&a[i]);
38             modify(i,a[i]);
39         }
40         scanf("%d",&m);
41         while(m--){
42             scanf("%s%d%d",e,&i,&j);
43             if(e[0]=='A'){
44                 modify(i,j);
45                 a[i]+=j;
46             }
47             else if(e[0]=='D'){
48                 if(j>=a[i]) j=(-1)*a[i];                 //由于可能刪除的比現有的還多,需要分開考慮
49                 else    j*=(-1);
50                 modify(i,j);
51                 a[i]+=j;
52             }
53             else
54                 printf("%d\n",sum(j)-sum(i-1));          //區間[i,j]的和
55         }
56     }
57 }
58 

posted on 2010-05-01 11:53 M.J 閱讀(329) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品免费网站| 亚洲欧美日韩中文视频| 国产精品久久久99| 久久精品亚洲乱码伦伦中文| 久久女同精品一区二区| 国产精品麻豆成人av电影艾秋| 国产精品久久午夜夜伦鲁鲁| 欧美二区视频| 久久偷看各类wc女厕嘘嘘偷窃| 一区二区高清在线观看| av成人福利| 亚洲欧美在线播放| 久久国产精品免费一区| 久久久久久综合| 久久综合图片| 欧美不卡在线视频| 欧美日本一道本| 国产欧美日本一区二区三区| 麻豆精品视频在线| 一区二区亚洲欧洲国产日韩| 亚洲国产欧美精品| 欧美日韩视频第一区| 久久免费黄色| 国产精品久久福利| 久久久久www| 国产精品国产三级国产a| 久久久一二三| 午夜精品一区二区三区四区| 久久久www| 国产亚洲综合性久久久影院| 亚洲精品五月天| 欧美成人69av| 欧美在线观看视频一区二区三区 | 国产女人精品视频| 亚洲人成网站在线播| 美女视频一区免费观看| 一本大道久久a久久精品综合| 性色av一区二区三区红粉影视| 欧美成人国产一区二区| 国产偷自视频区视频一区二区| 伊人久久综合| 美日韩在线观看| 欧美一区二区免费观在线| 欧美激情一区二区久久久| 国内精品视频在线观看| 性色av香蕉一区二区| 99亚洲一区二区| 欧美天天视频| 亚洲无吗在线| 中文一区二区| 亚洲九九精品| 国产精品一区二区在线观看网站| 国产精品久久波多野结衣| 亚洲国内自拍| 激情成人av| 欧美国产一区二区在线观看| 欧美激情一区二区三区四区| 亚洲第一伊人| 欧美成人精品1314www| 亚洲成色777777女色窝| av成人激情| 国产精品视频大全| 欧美专区在线观看一区| 亚洲国产经典视频| 亚洲在线1234| 最新国产乱人伦偷精品免费网站| 欧美黄色免费网站| 亚洲欧美日韩综合aⅴ视频| 久久久www成人免费毛片麻豆| 久久精品二区三区| 亚洲一区二区综合| 午夜精品一区二区三区四区| 国产日本欧美一区二区三区| 亚洲国产日韩在线| 国产精品视频1区| 欧美激情视频一区二区三区不卡| 在线一区二区三区四区| 欧美不卡在线视频| 久久久激情视频| 欧美在线一二三区| 亚洲制服丝袜在线| 在线综合亚洲欧美在线视频| 亚洲国产视频a| 在线看视频不卡| 韩国女主播一区二区三区| 国产精品福利在线| 欧美视频日韩| 国产精品久久久久秋霞鲁丝| 欧美一区日韩一区| 亚洲一区www| 亚洲一区综合| 久久aⅴ国产欧美74aaa| 午夜国产精品视频| 亚洲在线免费观看| 亚洲视频在线观看三级| 亚洲美女福利视频网站| 亚洲免费精彩视频| 亚洲欧美日韩在线不卡| 久久高清福利视频| 欧美大片91| 日韩一本二本av| 午夜精品视频| 欧美国产日本高清在线| 国产精品白丝av嫩草影院| 国产麻豆91精品| 亚洲国产日韩一区| 亚洲欧美另类在线| 国产精品一区毛片| 亚洲福利视频一区| 久久福利电影| 日韩一级黄色av| 久久久久久亚洲精品不卡4k岛国| 欧美国产日韩xxxxx| 国产日韩欧美亚洲| 一区二区日韩免费看| 久久手机精品视频| 一区二区三区日韩欧美精品| 久久九九99| 国产三区二区一区久久 | 欧美精品1区| 永久555www成人免费| 亚洲在线播放电影| 亚洲福利视频网| 久久gogo国模啪啪人体图| 国产精品国产福利国产秒拍| 99综合电影在线视频| 欧美国产亚洲视频| 久久久久一区| 伊人伊人伊人久久| 国产日本亚洲高清| 亚洲欧美精品中文字幕在线| 亚洲精品三级| 欧美日韩成人一区二区三区| 亚洲第一综合天堂另类专| 久久综合五月| 免费成人性网站| 亚洲精品国产精品乱码不99按摩| 欧美不卡一区| 欧美日韩精品是欧美日韩精品| 亚洲人永久免费| 999亚洲国产精| 国内外成人免费激情在线视频网站| 欧美激情精品久久久久久| 国产精品ⅴa在线观看h| 日韩视频在线播放| 99国产精品久久久久久久久久| 国产精品国产三级国产专播品爱网| 亚洲一品av免费观看| 国产精品久久| 老鸭窝91久久精品色噜噜导演| 狂野欧美激情性xxxx| 亚洲欧美激情诱惑| 久久精品噜噜噜成人av农村| 日韩亚洲欧美综合| 欧美与欧洲交xxxx免费观看 | 亚洲一级黄色| 在线观看欧美亚洲| 在线亚洲一区二区| 亚洲裸体视频| 久久人人精品| 欧美在现视频| 欧美视频国产精品| 亚洲国产精品视频| 国产在线不卡精品| 亚洲色无码播放| 99综合视频| 欧美不卡三区| 亚洲激情不卡| 一区二区亚洲欧洲国产日韩| 午夜精品视频| 久久精品视频免费观看| 欧美色123| 亚洲黑丝一区二区| 性做久久久久久免费观看欧美| 99精品热视频| 欧美日韩视频在线一区二区| 亚洲日本电影| aa亚洲婷婷| 欧美视频官网| 性欧美暴力猛交69hd| 牛牛精品成人免费视频| 99国产精品国产精品久久| 欧美日韩国产首页| 午夜免费在线观看精品视频| 久久艳片www.17c.com| 一区二区欧美在线观看| 国产综合色在线| 欧美日韩中文字幕综合视频| 久久精品亚洲一区二区三区浴池| 欧美好吊妞视频| 久久精品国产精品亚洲| 国内自拍一区| 国产精品a久久久久久| 午夜亚洲福利| 日韩午夜高潮| 老巨人导航500精品| 在线视频精品| 亚洲第一级黄色片| 欧美日韩精品免费观看视频完整| 在线中文字幕一区|