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

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 閱讀(335) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 亚洲二区在线观看| 欧美成人午夜激情在线| 9久re热视频在线精品| 99精品国产福利在线观看免费 | 亚洲在线视频免费观看| 国产九九精品| 久久全国免费视频| 欧美成人免费在线| 亚洲性视频h| 久久精品国产免费观看| 亚洲精品国产无天堂网2021| 亚洲人体一区| 国产欧美日韩一区| 美女精品在线观看| 欧美激情国产日韩精品一区18| 中文av字幕一区| 久久国产精品99精品国产| 亚洲国产精品久久久久秋霞影院 | 欧美激情二区三区| 国产精品电影网站| 麻豆成人综合网| 欧美日韩国产精品专区| 久久久久久久国产| 欧美人与性动交a欧美精品| 欧美有码在线观看视频| 欧美激情黄色片| 久久精品视频在线播放| 欧美日韩国产丝袜另类| 老司机久久99久久精品播放免费 | 亚洲欧美日韩精品在线| 亚洲精品乱码久久久久久久久| 亚洲图片你懂的| 亚洲国产一区二区a毛片| 亚洲图片欧美日产| 亚洲美女网站| 久久久久久久一区二区三区| 国产精品99久久久久久久女警 | 亚洲人永久免费| 国内伊人久久久久久网站视频| 99国产一区| 亚洲欧洲在线看| 欧美一区二区精品久久911| 亚洲视频中文| 欧美激情一区在线观看| 老司机67194精品线观看| 国产精品一区二区久久国产| 亚洲三级免费电影| 91久久精品www人人做人人爽 | 亚洲精品乱码久久久久久黑人| 国产一区二区三区丝袜| 亚洲专区在线| 亚洲欧美中文在线视频| 欧美黄污视频| 欧美韩国日本一区| 激情一区二区三区| 欧美一区二区精品| 欧美在线视频一区二区三区| 国产精品久久久久久久久动漫| 亚洲美女免费精品视频在线观看| 亚洲人成网在线播放| 老**午夜毛片一区二区三区| 老色鬼久久亚洲一区二区| 韩国精品在线观看| 久久久99爱| 美女久久一区| 91久久精品视频| 欧美大片免费看| 亚洲三级国产| 亚洲小视频在线观看| 国产精品国内视频| 亚洲与欧洲av电影| 久久精品国产亚洲a| 好看的日韩视频| 卡通动漫国产精品| 亚洲精品日韩精品| 亚洲免费在线视频| 国产午夜久久| 老巨人导航500精品| 亚洲精品欧美专区| 亚洲在线观看| 国产一区二区三区无遮挡| 久久久久9999亚洲精品| 亚洲第一网站| 亚洲特级片在线| 国产亚洲亚洲| 欧美肥婆在线| 亚洲一区二区在线免费观看| 久久精品动漫| 亚洲精一区二区三区| 国产精品成人一区| 久久久久国产精品人| 亚洲区一区二| 久久精品国产久精国产爱| 亚洲国产乱码最新视频| 欧美三级电影大全| 欧美一区二区视频免费观看 | 欧美中文在线免费| 亚洲国产精品久久人人爱蜜臀| 欧美日本亚洲| 欧美一级大片在线免费观看| 亚洲成色777777在线观看影院| 亚洲一区在线视频| 精品999网站| 欧美日韩在线一区二区| 久久亚洲精品一区| 夜夜狂射影院欧美极品| 欧美成人免费观看| 欧美一区免费视频| 亚洲精品视频在线观看网站 | 美女精品视频一区| 亚洲视频1区| 亚洲国产91| 久久精品中文| 亚洲伊人伊色伊影伊综合网 | 国产精品久久久亚洲一区| 玖玖在线精品| 欧美在线亚洲在线| 一本在线高清不卡dvd| 欧美国产精品中文字幕| 久久成年人视频| 亚洲天堂激情| 99热在线精品观看| 亚洲欧洲在线视频| **性色生活片久久毛片| 国产一区99| 国产乱码精品| 国产精品毛片va一区二区三区| 欧美激情综合网| 欧美.www| 免费亚洲一区二区| 久久综合久色欧美综合狠狠| 新片速递亚洲合集欧美合集| 国产精品99久久久久久久女警 | 久热精品视频在线| 久久riav二区三区| 性一交一乱一区二区洋洋av| 这里只有视频精品| 日韩一区二区精品葵司在线| 亚洲精品一二三区| 亚洲精品国产品国语在线app | 国产人久久人人人人爽| 欧美先锋影音| 国产精品成人一区| 国产精品日日摸夜夜添夜夜av| 欧美新色视频| 国产精品美女久久久久久免费| 国产精品sm| 国产欧美日韩精品一区| 国产亚洲欧美一级| 一区二区三区在线免费观看| 亚洲国产精品女人久久久| 亚洲欧洲日产国码二区| 日韩一二在线观看| 亚洲免费视频中文字幕| 欧美一区二区黄| 久久久久久久综合| 欧美+亚洲+精品+三区| 亚洲高清激情| 一区二区欧美视频| 亚洲欧美综合国产精品一区| 久久久久久久久岛国免费| 玖玖在线精品| 欧美色大人视频| 国产目拍亚洲精品99久久精品| 红杏aⅴ成人免费视频| 亚洲国产婷婷综合在线精品| 在线综合亚洲欧美在线视频| 欧美一级片一区| 奶水喷射视频一区| 亚洲精品黄色| 西西裸体人体做爰大胆久久久| 久久综合久久综合九色| 欧美日韩亚洲一区二区三区在线观看| 国产精品大片| 亚洲国产精品激情在线观看| 亚洲一区黄色| 久久影院午夜论| 亚洲毛片网站| 久久久久久久久久久一区| 欧美日韩久久精品| 国产日韩欧美精品| 一本色道久久| 久久亚洲免费| 亚洲视频一二区| 老司机免费视频一区二区| 国产精品女主播| 亚洲理论在线观看| 欧美中文在线观看国产| 亚洲精品你懂的| 亚洲永久免费精品| 欧美精品在线观看| 尤物精品国产第一福利三区 | 国产午夜精品麻豆| 一区二区日韩| 欧美激情四色|