7 4 求區間和

2021-10-02 02:14:56 字數 1049 閱讀 8469

本題會給你一段長度為n的整數序列,並進行k次詢問。每次詢問要求你給出區間a到b的和(序列下標由1到n)。由於區間和可能較大,請你輸出它對10000019取模的結果。

(注意:如果你想不到高效的做法,可以用樸素演算法得到一部分分,但本題滿分需要你用乙個比較高效的做法。)

輸入格式:

首先一行整數n,代表序列長度。

接下來一行n個整數,為序列內容。

接下來一行整數k,代表對區間和的詢問次數。

接下來k行,每行兩個整數a和b,請你輸入序列的第a到b號元素(含)的和取模後的結果。

輸出格式:

一共k行,每行乙個整數,代表詢問的區間和取模後的結果。

輸入樣例:

在這裡給出一組輸入。例如:

51 2 3 4 5

31 5

2 33 3

輸出樣例:

在這裡給出相應的輸出。例如:155

3資料限制:

n<=10

​6​​

k<=10

​5低效演算法

#include

using

namespace std;

intmain()

scanf

("%d"

,&k)

;for

(i=1

;i<=k;i++

)printf

("%d\n"

,sum%

10000019);

}return0;

}

高效演算法,應用字首和,輸入直接算出前邊資料的和,後邊輸出查詢兩次做差即可

#include

using

namespace std;

intmain()

;for

(i=1

;i<=n;i++

)scanf

("%d"

,&k)

;for

(i=1

;i<=k;i++

)return0;

}

求區間和問題(水題)

題目意思很明確,求某段區間和。資料結構選擇 陣列 方法思路 1 最直接的方法就是對於每次詢問的區間 a,b 從s a 1 疊加到s b 1 但是考慮到這種方法,對於每次詢問都要重新疊加。時間複雜度為o n n 超時。2 考慮到每次都要重新疊加。可以選擇用陣列sum的第k項來儲存前k項和。對於區間 a...

樹狀陣列求元素值和區間和

求單個位置的值可以用樹狀陣列保留字首和 include include include include using namespace std define maxn 100005 int f maxn int n int m int lowbit int x void add int x,int ...

線段樹(一)建樹 求區間和

線段樹是一種二叉樹,可以快速的查詢區間和,解決區間類問題 節點i,左邊界l,有邊界r,區間和的值tree i tree i 1 tree i 1 1 左兒子節點下標i 1,左邊界l,右邊界l r l 1 右兒子節點下標i 1 1,左邊界l r l 1 1,右邊界r 因為每個節點i的左右邊界已經確定,...