【樹狀數組】

問題的提出:是否可以用線性數據結構的方法解決動態統計子樹權和的問題呢??有的,樹狀數組。

假設當前數組為a[],元素個數為n。

1. 子區間的權和數組為sum,那么數組a[]中 i 到 j這段區間的數組元素和為sum[i,j]=?a[k]的累加 【k屬于(i->j)】

2. 現在定義前綴和數組s[],s[i]代表從a[i]---a[i]的和,那么又可以這樣表示 sum[i,j] = s[j]-s[i-1].

3. lowbit(k)為整數k的二進制表示中?右邊第一個1所代表的數字,lowbit(k)=k&(-k).

4.?樹狀數組為c[],c[k]存儲的是從a[k]開始向 低的下標那邊數lowbit(k)個元素之和,一層遍歷。

注意:我們要把a[]數組的元素從下標1開始存儲.

這里列舉一下:

c[1]=a[1];???????????????????????????????????????????????????????????? s[1]=c[1];

c[2]=a[2]+a[1];???????????????????????????????????????????????????? s[2]=c[2];

c[3]=a[3];???????????????????????????????????????????????????????????? s[3]=c[3]+c[2];

c[4]=a[4]+a[3]+a[2]+a[1];??????????????????????????????????? s[4]=c[4];

c[5]=a[5];???????????????????????????????????????????????????????????? s[5]=c[5]+c[4];

c[6]=a[6]+a[5];??????????????????????????????????????????????????? s[6]=c[6]+c[4];

c[7]=a[7];???????????????????????????????????????????????????????????? s[7]=c[7]+c[6]+c[4];

c[8]=a[8]+a[7]+a[6]+a[5]a[4]+a[3]+a[2]+a[1];??? s[8]=c[8];

c[9]=a[9];???????????????????????????????????????????????????????????? s[9]=c[9]+c[8];

?

5.?計算每個s[i]的復雜度是O( log2(n) ).

6.?代碼:

#include <stdio.h>
#include <string.h>int a[101];
int c[101];
int s[101];int lowbit(int x)
{return x&(-x);
}int sum(int x)
{int s=0;while(x>0){s+=c[x];x=x-lowbit(x);}return s;
}int main()
{int i, j, k;for(i=1; i<=10; i++)a[i]=i;//創建a[]數組for(i=1; i<=10; i++){//計算每個c[i]c[i]=0;//c[i]從初始為0for(j=i-lowbit(i)+1; j<=i; j++){c[i]+=a[j];}}for(i=1; i<=10; i++){s[i]=sum(i);//計算i的前綴數組和}return 0;
}

?

轉載于:https://www.cnblogs.com/yspworld/p/4724552.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374662.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374662.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374662.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2013VS快捷鍵

VS2013常用快捷鍵&#xff1a; 1.回到上一個光標位置/前進到下一個光標位置 1&#xff09;回到上一個光標位置&#xff1a;使用組合鍵“Ctrl -”&#xff1b; 2&#xff09;前進到下一個光標位置&#xff1a;“Ctrl Shift - ”。 2.復制/剪切/刪除整行代碼 1&#xff09;如果…

GWT,GWT-Ext(SmartGWT),GXT(Ext GWT)常見任務

我在我們的JCG合作伙伴之一UI-Programming博客上瀏覽了一些舊文章&#xff0c;并注意到有很多簡短的文章&#xff0c;介紹了如何使用GWT&#xff0c;GWT-Ext&#xff08;SmartGWT&#xff09;和GXT&#xff08;Ext GWT&#xff09;執行一些常見任務。 &#xff09;。 我相信它們…

h.264 去塊濾波

塊效應及其產生原因 我們在觀看視頻的時候&#xff0c;在運動劇烈的場景常能觀察到圖像出現小方塊&#xff0c;小方塊在邊界處呈現不連續的效果&#xff08;如下圖&#xff09;&#xff0c;這種現象被稱為塊效應&#xff08;blocking artifact&#xff09;。 首先我們需要搞清楚…

android開發的知識點(一)

1.android中背景圖的設置&#xff1a; 將背景圖放入到項目中的res/drawable-hdpi或res/drawable-mdpi或res/drawable-xhdpi或res/drawable-xxhdpi等任一文件夾下。然后在layout的xml文件夾下使用android:background"drawable/背景圖名"&#xff0c;其中背景圖必須是p…

566. 重塑矩陣

在 MATLAB 中&#xff0c;有一個非常有用的函數 reshape &#xff0c;它可以將一個 m x n 矩陣重塑為另一個大小不同&#xff08;r x c&#xff09;的新矩陣&#xff0c;但保留其原始數據。 給你一個由二維數組 mat 表示的 m x n 矩陣&#xff0c;以及兩個正整數 r 和 c &…

RabbitMQ播放模塊! 構架

RabbitMQ提供了具有可預測且一致的吞吐量和延遲的高可用性&#xff0c;可伸縮和便攜式消息系統。 RabbitMQ是AMQP &#xff08;業務消息傳遞的開放標準&#xff09;的領先實現 &#xff0c;并且通過適配器支持XMPP&#xff0c;SMTP&#xff0c;STOMP和HTTP來進行輕量級Web消息傳…

Cyclic Nacklace - HDU 3746(next求循環節)

題目大意&#xff1a;給你一些串&#xff0c;問如果想讓這個串里面的循環節至少循環兩次&#xff0c;需要添加幾個字符&#xff08;只能在最前面或者最后面添加&#xff09;。比如ababc 需要添加5個就是添加ababc。 分析&#xff1a;其實字符串的長度len-next[len] 最小循環節…

Xuggler開發教程

大家好&#xff0c; 在這篇文章中&#xff0c;我想介紹JavaCodeGeeks上的一些很酷的新教程。 他們將討論與Xuggler &#xff0c; FFmpeg和Wowza進行媒體&#xff08;音頻/視頻&#xff09;操縱的方式。 我將在這篇文章中跟蹤所有相關的教程。 您可以通過查看Pat較早的關于使用…

739. 每日溫度

請根據每日 氣溫 列表 temperatures &#xff0c;請計算在每一天需要等幾天才會有更高的溫度。如果氣溫在這之后都不會升高&#xff0c;請在該位置用 0 來代替。 代碼一 單調棧 class Solution {public int[] dailyTemperatures(int[] temperatures) {int length temperatur…

一個非常好的性格切割問題

結伙stackoverflow看到一道非常不錯的問題。遂拿來分享之。 題目要求&#xff1a;我有一個非常長的字符串&#xff1a; String s1"This is my world. This has to be broken." 我要把上面的字符串打亂以固定的長度&#xff08;比如10&#xff09;使得輸出為&#xff…

Cajo,用Java完成分布式計算的最簡單方法

摘自Jonas Boner在2006年5月1日發布在TheServerSide.com上的文章“ Distributed Computing Easy”中的介紹部分&#xff1a; 分布式計算在企業應用程序開發世界中變得越來越重要。 如今&#xff0c;開發人員不斷需要解決以下問題&#xff1a;如何通過將應用程序擴展到單個節點之…

Java中Integer.parseInt()用法

1.先看看該方法的實現 public static int parseInt(String s) throws NumberFormatException {return parseInt(s,10);}2.事實上他可以有兩個參數&#xff0c; public static int parseInt(String s,int radix)意味著將字符串s按照radix進制轉換成整數。太抽象了&#xff0c;…

關于maven相互依賴的工程部署問題

環境&#xff1a;win7 64位&#xff0c;myeclipse10.6&#xff0c;eclipse4.5&#xff0c;都配置了svn插件 問題描述&#xff1a;1、工程模塊化之后都是通過pom配置model來關聯的&#xff0c;svn提交之后&#xff0c;通過myeclipse的svn‘檢出為項目’&#xff0c;依賴的子工程…

什么是JAR包?

jar包就是別人已經寫好的一些類&#xff0c;然后將這些類進行打包&#xff0c;你可以將這些jar包引入你的項目中&#xff0c;然后就可以直接使用這些jar包中的類和屬性了&#xff0c;這些jar包一般都會放在lib目錄下的 轉載于:https://www.cnblogs.com/wulianshang/p/5513474.h…

....

輸入流和輸出流相對于內存設備而言. 將外設中的數據讀取到內存中:輸入將內存的數寫入到外設中&#xff1a;輸出。 字符流的由來&#xff1a;其實就是&#xff1a;字節流讀取文字字節數據后&#xff0c;不直接操作而是先查指定的編碼表。獲取對應的文字。在對這個文字進行操作。…

DataNucleus 3.0與Hibernate 3.5

如官方產品站點所述&#xff0c; DataNucleus Access Platform是現有的最符合標準的開源Java持久性產品。 它完全符合JDO1 &#xff0c; JDO2 &#xff0c; JDO2.1 &#xff0c; JDO2.2 &#xff0c; JDO3 &#xff0c; JPA1和JPA2 Java標準。 它還符合OGC簡單功能規范&#xf…

手工內存管理規則的總結

1.如果需要保持一個對象不被銷毀,可以使用retain.在使用完對象后,需要使用release銷毀 2.給對象發送release消息并不會銷毀對象,只有當這個對象的引用計數減為0時,對象才會被銷毀.然后系統會發送dealloc消息給這個對象用于釋放它的內存. 對使用了retain或者copy,mutableCopy,al…

Java 字符,整型,字符串三者轉換

1.整型 —> 字符型 先把整型轉化為字符串&#xff0c;再把字符串轉化為字符 //整型 ---> 字符型 toString(int n).charAt(int index) System.out.println(Integer.toString(20).charAt(0));2.整型 —> 字符串 //整型 ---> 字符串 Inte…

AngularJS 的常用特性(二)

3、列表、表格以及其他迭代型元素 ng-repeat可能是最有用的 Angular 指令了&#xff0c;它可以根據集合中的項目一次創建一組元素的多份拷貝。 比如一個學生名冊系統需要從服務器上獲取學生信息&#xff0c;目前先把模型之間定義在 JavaScript 代碼里面&#xff1a; 1 var stud…

Ruby,Python和Java中的Web服務

今天&#xff0c;我不得不準備一些示例來說明Web服務是可互操作的。 因此&#xff0c;我已經使用Metro使用Java創建了一個簡單的Web服務&#xff0c;并在Tomcat上啟動了它。 然后嘗試使用Python和Ruby消耗它們。 這是全部完成的過程… Java中的Web服務 我從Java中的簡單Web服…