最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言樹狀數(shù)組的實例詳解

 更新時間:2017年10月15日 16:58:46   作者:zubizakeli  
這篇文章主要介紹了C語言樹狀數(shù)組的實例詳解的相關資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下

C語言樹狀數(shù)組的實例詳解

最近學了樹狀數(shù)組,給我的感覺就是 這個數(shù)據(jù)結(jié)構好神奇啊^_^

首先她的常數(shù)比線段樹小,其次她的實現(xiàn)復雜度也遠低于線段樹 (并沒有黑線段樹的意思=-=)

所以熟練掌握她是非常有必要的。。

關于樹狀數(shù)組的基礎知識與原理網(wǎng)上一搜一大堆,我就不贅述了,就談一些樹狀數(shù)組的應用好了

1,單點修改,求區(qū)間和

#define lowbit(x) (x&-x) // 設 x 的末尾零的個數(shù)為 y , 則 lowbit(x) == 2^y 
void Update(int i,int v) // 初始化與單點修改 
{
  while(i <= n)
  {
    c[i] += v ;
    i += lowbit(i) ;
  }
}

inline int Sum(int i)  // 區(qū)間求和 
{
  int res = 0 ;
  while(i > 0)
  {
    res += c[i] ;
    i -= lowbit(i) ;
  }
  return res ;
}

2,區(qū)間修改,單點查詢

這里要用到差分的思想

創(chuàng)建一個差分數(shù)組c[],令c[i] = a[i] - a[i-1] (a[i] 表示原本的第i個數(shù))

則a[i] = ( a[i] - a[i-1] ) + ( a[i-1] - a[i-2] ) + ...... + ( a[2] - a[1] ) +a[1]

         = c[i] + c[i-1] + ...... + c[2] + c[1]

所以單點查詢變成了區(qū)間求和

那么區(qū)間修改怎么辦呢 ?

我們看這樣一個例子:

a 1 3 4 5 7 10

c 1 2 1 1 2 3

若我們令區(qū)間[2,4]加2,則

a 1 5 6 7 9 10

c 1 4 1 1 2 1

我們可以發(fā)現(xiàn)只有c[2]和c[5]的數(shù)值改變了,其實原理也很好想,區(qū)間內(nèi)的前后元素差是不變的,只有(區(qū)間第一個元素與前一個元素的差) 和 (區(qū)間后第一個元素與區(qū)間末尾元素的差) 改變了。所以區(qū)間修改問題變成了單點修改問題。

  for(int i=1;i<=n;i++)
  {
    a[i] = read() ;
    Update(i,a[i]-a[i-1]);
  } 
/*  int x=0,y=0;    // 注釋掉的內(nèi)容是空間上的優(yōu)化(初學者建議先跳過)
  for(int i=1;i<=n;i++)
  {
    if(i%2)
    {
      x = read() ;
      Update(i,x-y);
    }
    else
    {
      y = read() ;
      Update(i,y-x) ;
    }
  } */
  int ii ;
  int k,x,y;
  for(int i=1;i<=m;i++)
  {
    ii = read() ;
    if(ii == 1)
    {
      x = read() ; y = read() ; k = read() ;
      Update(x,k);
      Update(y+1,-k);
    }
    if(ii == 2)
    {
      x = read() ;
      printf("%d\n",Sum(x));
    }
  }

(洛谷有對應的模板題 P3374 與 P3368)

上述就是樹狀數(shù)組最基礎的兩個應用,日后更深入的學習后再來更新。

 如有疑問請留言或到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • 詳解C++設計模式編程中責任鏈模式的應用

    詳解C++設計模式編程中責任鏈模式的應用

    這篇文章主要介紹了C++設計模式編程中責任鏈模式的應用,責任鏈模式使多個對象都有機會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關系,需要的朋友可以參考下
    2016-03-03
  • vscode+platformIO開發(fā)stm32f4的實現(xiàn)

    vscode+platformIO開發(fā)stm32f4的實現(xiàn)

    這篇文章主要介紹了vscode+platformIO開發(fā)stm32f4的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • c++ STL容器總結(jié)之:vertor與list的應用

    c++ STL容器總結(jié)之:vertor與list的應用

    本篇文章對c++中STL容器中的vertor與list的應用進行了詳細的分析解釋。需要的朋友參考下
    2013-05-05
  • C語言 數(shù)據(jù)結(jié)構中求解迷宮問題實現(xiàn)方法

    C語言 數(shù)據(jù)結(jié)構中求解迷宮問題實現(xiàn)方法

    這篇文章主要介紹了C語言 數(shù)據(jù)結(jié)構中求解迷宮問題實現(xiàn)方法的相關資料,需要的朋友可以參考下
    2017-03-03
  • C語言實現(xiàn)貪吃蛇游戲代碼

    C語言實現(xiàn)貪吃蛇游戲代碼

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)貪吃蛇游戲代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C++中的Lambda表達式詳解

    C++中的Lambda表達式詳解

    這篇文章主要介紹了C++中的Lambda表達式詳解,本文講解了基本語法、Lambda的使用等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C\C++ 獲取當前路徑實例詳解

    C\C++ 獲取當前路徑實例詳解

    這篇文章主要介紹了C\C++ 獲取當前路徑實例詳解的相關資料,需要的朋友可以參考下
    2017-06-06
  • C語言數(shù)組指針的小例子

    C語言數(shù)組指針的小例子

    這篇文章介紹了,用c語言實現(xiàn)的一個數(shù)組指針的小例子,有需要的朋友可以參考一下
    2013-07-07
  • C語言實現(xiàn)簡易三子棋游戲

    C語言實現(xiàn)簡易三子棋游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易三子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C語言實現(xiàn)簡易三子棋

    C語言實現(xiàn)簡易三子棋

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易三子棋,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論

黄石市| 商河县| 思茅市| 玉门市| 西吉县| 巴彦淖尔市| 舒城县| 蒙自县| 绥芬河市| 吉林省| 根河市| 龙门县| 沅陵县| 兰西县| 镇雄县| 桐城市| 安岳县| 壤塘县| 通江县| 黄陵县| 来安县| 阿荣旗| 科技| 图木舒克市| 丰宁| 车险| 梁山县| 双牌县| 宁晋县| 砀山县| 长岭县| 略阳县| 泰安市| 商南县| 广安市| 舒城县| 博湖县| 龙州县| 景德镇市| 胶州市| 彭阳县|