題目
1819題目分析:先用乙個sum[i]維護乙個前i的和,再用乙個ai[i]來維護a[i]*i的和,這樣就可以快速求出l,r區間的和了(公式:ans=ai[r]-ai[l-1]-(sum[r]-sum[l-1])*(l-1)). 二哥的求和
時間限制
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防止溢位
#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編號圍坐一圈,二哥站在圈中心,由二哥...