bjtu 1819 二哥求和(字首和)

2022-07-20 00:30:30 字數 1868 閱讀 2645

題目

1819

. 二哥的求和

時間限制

1000

ms記憶體限制

128mb

題目描述

某一天,calfcamel問二哥,有道數學題怎麼做呀?二哥看了一下說我不會呀,於是二哥找到了你,請你幫他解決這個問題,這樣二哥就可以鄙視calfcamel數學菜了。

給你乙個長度為n的陣列a[i],有q個詢問,對於每次詢問[l,r],輸出

∑ i=l r a i (i−l+1

) ∑i=lrai(i−l+1

) 也就是輸出[l,r]這段區間上,第乙個數乘以一,第二個數乘以2,第三個數乘以3,……的和。

輸入資料

第一行為乙個t,表示有t(t

<= 5

)組資料

對於每組資料:

第一行是乙個n(n

<= 100000)

第二行有n個數a[i] (

0<=a[i] <=100000),下標從1開始,即a[1

] – a[n]

第三行有乙個q(q

<=100000

),表示詢問的數目

接下來q行,每行有兩個整數l,r

輸出資料

對於每一組資料,第一行輸出」case x: 」 (冒號後有一空格)

接下來q行,每行輸出詢問的答案

檔案最後使用換行符結束檔案

樣例輸入

 複製 23

1231

1351

2345

3152

435樣例輸出

 複製 case 1:

14case 2:

5520

26樣例說明

資料比較大,c/c++請使用scanf讀入 ,使用cin可能會超時。

本題目最後答案超出int,c/c++請使用long long防止溢位

題目分析:先用乙個sum[i]維護乙個前i的和,再用乙個ai[i]來維護a[i]*i的和,這樣就可以快速求出l,r區間的和了(公式:ans=ai[r]-ai[l-1]-(sum[r]-sum[l-1])*(l-1))

#define debug

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define f first

#define s second

#define pb push_back

using namespace std;

typedef long long ll;

typedef pairpii;

typedef pairpll;

typedef pairpil;

const ll inf = 0x3f3f3f3f;

const double inf=1e8+100;

const double eps=1e-8;

const ll maxn =1e6+300;

const int n = 1e4+10;

const ll mod=1e9+7;

//define

ll a[maxn];

ll ai[maxn];

ll sum[maxn];

//字首和 a[i],a[i]*i

void sum_add()

//ll q;

scanf("%lld",&q);

while(q--) }}

//--solve

void solve()

int main()

1008 二哥買期貨

對起始年份和結束年份,可以對每一天單獨判斷 對中間的每個整年,週末總的天數分為兩部分 1.每個整年恰有完整的52個周,所以至少有 2 52 天是週末 2.閏年時,366 7 2,需要判斷12 31和12 30是否為週末即可,平年需要判斷12 31是否為週末 對中間的每個整年,都有11天假日,注意週末...

1003 二哥養細菌

類似bfs擴充套件的思想 將第一代細菌位置入佇列 佇列中細菌到上下左右沒有細菌的位置進行繁殖 更改這些位置的標記 0 1 繁殖出的新一代細菌入棧 如果棧空,結束,否則佇列清空,棧中的新一代細菌入佇列 如果棧空,說明培養皿已經充滿了 題目保證最終能夠充滿培養皿 複雜度o n 1 include 2 3...

1038 二哥的約瑟夫

話說二哥當年學習資料結構的時候遇到了那道猴子報數的題目,其實這就是經典的約瑟夫問題。可是當年的二哥還是個毛頭小子,只會用模擬的方法,而其他同學卻使用了一些令二哥完全摸不到頭腦的方法。二哥一怒之下改了題目 話說當年花果山的猴子要選大王,選舉辦法如下 所有猴子按1 m編號圍坐一圈,二哥站在圈中心,由二哥...