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

ACM___________________________

______________白白の屋
posts - 182, comments - 102, trackbacks - 0, articles - 0
<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用鏈接

留言簿(24)

隨筆分類(332)

隨筆檔案(182)

FRIENDS

搜索

積分與排名

最新隨筆

最新評論

閱讀排行榜

評論排行榜

MiYu原創, 轉帖請注明 : 轉載自 ______________白白の屋    

 

題目地址:

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

題目描述:

敵兵布陣

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4546    Accepted Submission(s): 1818


Problem Description
C國的死對頭A國這段時間正在進行軍事演習,所以C國間諜頭子Derek和他手下Tidy又開始忙乎了。A國在海岸線沿直線布置了N個工兵營地,Derek和Tidy的任務就是要監視這些工兵營地的活動情況。由于采取了某種先進的監測手段,所以每個工兵營地的人數C國都掌握的一清二楚,每個工兵營地的人數都有可能發生變動,可能增加或減少若干人手,但這些都逃不過C國的監視。
中央情報局要研究敵人究竟演習什么戰術,所以Tidy要隨時向Derek匯報某一段連續的工兵營地一共有多少人,例如Derek問:“Tidy,馬上匯報第3個營地到第10個營地共有多少人!”Tidy就要馬上開始計算這一段的總人數并匯報。但敵兵營地的人數經常變動,而Derek每次詢問的段都不一樣,所以Tidy不得不每次都一個一個營地的去數,很快就精疲力盡了,Derek對Tidy的計算速度越來越不滿:"你個死肥仔,算得這么慢,我炒你魷魚!”Tidy想:“你自己來算算看,這可真是一項累人的工作!我恨不得你炒我魷魚呢!”無奈之下,Tidy只好打電話向計算機專家Windbreaker求救,Windbreaker說:“死肥仔,叫你平時做多點acm題和看多點算法書,現在嘗到苦果了吧!”Tidy說:"我知錯了。。。"但Windbreaker已經掛掉電話了。Tidy很苦惱,這么算他真的會崩潰的,聰明的讀者,你能寫個程序幫他完成這項工作嗎?不過如果你的程序效率不夠高的話,Tidy還是會受到Derek的責罵的.
 

Input
第一行一個整數T,表示有T組數據。
每組數據第一行一個正整數N(N<=50000),表示敵人有N個工兵營地,接下來有N個正整數,第i個正整數ai代表第i個工兵營地里開始時有ai個人(1<=ai<=50)。
接下來每行有一條命令,命令有4種形式:
(1) Add i j,i和j為正整數,表示第i個營地增加j個人(j不超過30)
(2)Sub i j ,i和j為正整數,表示第i個營地減少j個人(j不超過30);
(3)Query i j ,i和j為正整數,i<=j,表示詢問第i到第j個營地的總人數;
(4)End 表示結束,這條命令在每組數據最后出現;
每組數據最多有40000條命令
 

Output
對第i組數據,首先輸出“Case i:”和回車,
對于每個Query詢問,輸出一個整數并回車,表示詢問的段中的總人數,這個數最多不超過1000000。
 

Sample Input
1 10 1 2 3 4 5 6 7 8 9 10 Query 1 3 Add 3 6 Query 2 7 Sub 10 2 Add 6 3 Query 3 10 End
 

Sample Output
Case 1: 6 33 59
 

題目分析 :

        看了 一下午的書,  終于有一點明白了樹狀數組這東西 , 果然還是要做題啊, 一直不明白的地方, 刷了這
水題后,  貌似明白了一點了     . 

       這是一道純粹的 樹狀數組 的題目, 有模板的話直接模板就可以AC了, 不過手打也用不了什么時間.

因為查詢語句是固定的, 所以不需要用 字符串比較函數, 直接比較首字符就可以了, 剛開始的時候想偷

懶, 把 quy 函數寫成 quy ( int x, int y ) , 想一次就把結果求出來......還是對樹狀數組的理解不深刻......從其

結構而言, 這種想法就不可能實現.   

 

簡單介紹下 樹狀數組 :

        樹狀數組是一個查詢和修改復雜度都為log(n)的數據結構,假設數組a[1...n],那么查詢a[1] + …… + a[i] 的時間是log級別的,而且是一個在線的數據結構,支持隨時修改某個元素的值,復雜度也為log級別。

 

來觀察一下這個圖:

 


 

令這棵樹的結點編號為C1,C2……Cn。令每個結點的值為這棵樹的值的總和,那么容易發現:

C1 = A1

C2 = A1 + A2

C3 = A3

C4 = A1 + A2 + A3 + A4

C5 = A5

C6 = A5 + A6

C7 = A7

C8 = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8

……

C16 = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 + A9 + A10 + A11 + A12 + A13 + A14 + A15 + A16

 

這里有一個有趣的性質,下午推了一下發現:

設節點編號為x,那么這個節點管轄的區間為2^k(其中kx二進制末尾0的個數)個元素。因為這個區間最后一個元素必然為Ax,所以很明顯:

Cn = A(n – 2^k + 1) + …… + An

算這個2^k有一個快捷的辦法,定義一個函數如下即可:

int lowbit(int x){

return x & (x ^ (x – 1));

}

 

當想要查詢一個SUM(n)時,可以依據如下算法即可:

step1: 令sum = 0,轉第二步;

step2: 假如n <= 0,算法結束,返回sum值,否則sum = sum + Cn,轉第三步;

step3:  n = n – lowbit(n),轉第二步。

 

可以看出,這個算法就是將這一個個區間的和全部加起來,為什么是效率是log(n)的呢?以下給出證明:

n = n – lowbit(n)這一步實際上等價于將n的二進制的最后一個1減去。而n的二進制里最多有log(n)1,所以查詢效率是log(n)的。

 

那么修改呢,修改一個節點,必須修改其所有祖先,最壞情況下為修改第一個元素,最多有log(n)的祖先。所以修改算法如下(給某個結點i加上x):

step1: i > n時,算法結束,否則轉第二步;

step2: Ci = Ci + x i = i + lowbit(i)轉第一步。

 

i = i +lowbit(i)這個過程實際上也只是一個把末尾1補為0的過程。

//修改過程必須滿足減法規則!

 

所以整個程序如下:

const int MAX = 50000;

#define lowbit(x) ((x)&(-x))

int com[ MAX + 1 ],N,T;

void modify ( int pos, int val ){

     while ( pos <= N ){

            com[pos] += val;

            pos = pos + lowbit(pos);  

     } 

}

int quy ( int x ){

    int sum = 0;

    while ( x > 0 ){

           sum = sum + com[x];

           x = x - lowbit(x);

    } 

    return sum;

}

初始化 :     for ( int i = 1; i <= N; ++ i ){

                       scanf ( "%d",&x );

                       modify ( i, x ); 

                 } 

----------------------------------------------------------------------------------------------------------------------------

本題代碼如下 :

 

 /*

MiYu原創, 轉帖請注明 : 轉載自 ______________白白の屋

          http://www.cnblog.com/MiYu

Author By : MiYu

Test      : 1

Program   : 1166

*/


#include <iostream>

using namespace std;

const int MAX = 50000;

#define lowbit(x) ((x)&(-x))

int com[ MAX + 1 ],N,T;

void modify ( int pos, int val ){

     while ( pos <= N ){

            com[pos] += val;

            pos = pos + lowbit(pos);  

     } 

}

int quy ( int x ){

    int sum = 0;

    while ( x > 0 ){

           sum = sum + com[x];

           x = x - lowbit(x);

    } 

    return sum;

}

int main ()

{

    while ( scanf ( "%d",&T ) != EOF ){

          int ca = 1,x,y;

          while ( T -- ){  

                 printf ( "Case %d:\n",ca++ );

                 scanf ( "%d",&N );

                 for ( int i = 0; i <= N; ++ i ) com[i] &= 0;

                 for ( int i = 1; i <= N; ++ i ){

                       scanf ( "%d",&x );

                       modify ( i, x ); 

                 } 

                 char ask[10];

                 while ( scanf ( "%s",ask ), ask[0] != 'E' ){    

                        scanf ( "%d%d",&x,&y );

                        switch ( ask[0] ){

                                case 'A': modify ( x, y ); break;

                                case 'S': modify ( x, -y ); break;

                                case 'Q': printf ( "%d\n",quy ( y ) - quy ( x-1 ) ); break;

                        }

                 }

          } 

    }

    return 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>
            国产精品一区二区久久国产| 香蕉av777xxx色综合一区| 久久综合九色欧美综合狠狠| 亚洲欧美日韩综合国产aⅴ| 亚洲一区二区黄| 一区二区精品国产| 亚洲一区在线观看免费观看电影高清| 中国成人在线视频| 久久精品视频网| 久久国产精品99国产精| 久久久久久综合| 欧美成人资源网| 亚洲精品一区二区三区av| 99精品视频免费全部在线| 亚洲一区二区在线播放| 久久久精品999| 欧美日韩免费观看一区| 国产三级精品在线不卡| 亚洲国产高清在线观看视频| 日韩午夜在线观看视频| 亚洲欧美综合精品久久成人| 欧美第一黄网免费网站| 99国产精品久久久久久久久久| 亚洲网友自拍| 美女精品自拍一二三四| 欧美天堂在线观看| 在线观看av不卡| 篠田优中文在线播放第一区| 亚洲电影免费观看高清完整版| 亚洲精品欧美| 午夜精品999| 欧美精品久久天天躁| 国产精品日韩久久久| 亚洲国产精品一区二区三区| 亚洲欧美日韩视频一区| 亚洲黄色小视频| 亚洲一二三四久久| 99热这里只有精品8| 午夜精品久久久久久久蜜桃app| 久久午夜电影| 国产精品久久久久久久7电影| 狠狠色综合网| 欧美一区二区精美| 亚洲手机在线| 国产精品久久久| 亚洲香蕉网站| 一本一本a久久| 欧美三级视频| 亚洲婷婷免费| 亚洲精品美女| 欧美理论电影在线播放| 亚洲精品国产精品久久清纯直播| 久久久久久网| 久久精品国产99国产精品| 国产亚洲精品久久飘花| 久久成人国产精品| 午夜精品在线看| 免费看亚洲片| 国产午夜精品久久久久久久| 亚洲欧美中文字幕| 亚洲在线免费观看| 国产精品永久在线| 欧美一级视频精品观看| 亚洲综合精品| 国产精品制服诱惑| 欧美在线视频免费播放| 亚洲男人天堂2024| 国语自产精品视频在线看| 亚洲国产欧美日韩另类综合| 午夜久久电影网| 韩国三级电影久久久久久| 蜜臀久久99精品久久久画质超高清| 午夜在线观看免费一区| 影音国产精品| 亚洲免费观看高清完整版在线观看熊| 伊人成人在线视频| 在线播放豆国产99亚洲| 亚洲国产精品成人精品| 免费永久网站黄欧美| 欧美大成色www永久网站婷| 91久久夜色精品国产九色| 亚洲国产国产亚洲一二三| 欧美高清在线视频观看不卡| 妖精视频成人观看www| 在线亚洲欧美专区二区| 国产日韩综合| 亚洲国产一区在线| 欧美日韩在线综合| 久久精品男女| 欧美成人xxx| 亚洲欧美日韩精品久久奇米色影视| 亚洲在线观看免费视频| 亚洲国产精品久久久久| 99在线精品视频| 国产日韩欧美高清| 亚洲国产精品高清久久久| 国产精品亚洲成人| 亚洲大片免费看| 国产精品影音先锋| 欧美激情精品久久久久久大尺度| 欧美日韩精品一区| 麻豆亚洲精品| 国产精品看片资源| 欧美激情亚洲视频| 国产日韩一区在线| 一区二区国产在线观看| 亚洲福利专区| 香蕉久久精品日日躁夜夜躁| 99综合在线| 久久一区国产| 久久精品一本久久99精品| 欧美日韩免费观看一区=区三区| 久久频这里精品99香蕉| 欧美视频日韩| 亚洲第一精品久久忘忧草社区| 国产日韩1区| 在线中文字幕一区| 99精品欧美一区二区三区综合在线| 久久国产精品色婷婷| 亚洲欧美日韩精品久久亚洲区 | 欧美在线视频不卡| 一个色综合av| 欧美精品精品一区| 欧美日韩免费高清| 亚洲免费在线精品一区| 欧美高清日韩| 欧美成人精品影院| 国产在线欧美日韩| 午夜一级久久| 欧美资源在线观看| 国产精品夜色7777狼人| 亚洲一区二区三区久久| 亚洲综合色丁香婷婷六月图片| 欧美精品一区二区三区蜜桃| 亚洲国产精品第一区二区三区 | 亚洲欧洲日本一区二区三区| 久久高清免费观看| 久久精品亚洲一区| 国产老女人精品毛片久久| 中文精品视频一区二区在线观看| 夜夜爽av福利精品导航| 欧美精品一区在线发布| 亚洲精品国产精品乱码不99按摩| 日韩视频免费观看高清完整版| 欧美国产亚洲另类动漫| 日韩视频在线永久播放| 亚洲综合色丁香婷婷六月图片| 国产精品手机在线| 久久国产婷婷国产香蕉| 久久一区二区视频| 最近中文字幕日韩精品| 欧美三区在线视频| 亚洲欧美激情一区二区| 久久人人97超碰人人澡爱香蕉| 一区二区亚洲精品| 欧美福利电影网| 国产乱码精品一区二区三| 欧美在线不卡视频| 欧美肥婆在线| 亚洲一区成人| 狠狠色综合网| 欧美日韩视频在线观看一区二区三区| 在线一区视频| 欧美夫妇交换俱乐部在线观看| 日韩视频在线一区二区| 国产精品女人久久久久久| 久久久久99| 99在线精品观看| 久久在线精品| 亚洲午夜一区| 亚洲第一搞黄网站| 欧美午夜一区二区三区免费大片| 欧美一区二区视频在线观看2020| 亚洲高清不卡av| 久久国产加勒比精品无码| 亚洲精品你懂的| 国产精品系列在线播放| 欧美福利视频在线| 亚洲小视频在线| 欧美国产在线电影| 欧美专区在线观看| 这里只有精品电影| 在线观看中文字幕不卡| 国产精品男gay被猛男狂揉视频| 蜜桃久久精品乱码一区二区| 亚洲女同精品视频| 日韩一二三区视频| 欧美电影在线观看完整版| 久久av一区二区三区| 亚洲视频一区| 日韩视频国产视频| 亚洲国产成人在线视频| 国产视频在线观看一区二区| 一本色道久久综合亚洲精品按摩| 午夜久久久久久久久久一区二区| 久久福利影视| 亚洲激情另类| 午夜激情综合网| 亚洲久色影视| 亚洲在线一区二区|