NYOJ 108 士兵殺敵(一)

2021-08-05 20:01:22 字數 1486 閱讀 9951

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:3 描述

南將軍手下有n個士兵,分別編號1到n,這些士兵的殺敵數都是已知的。

小工是南將軍手下的軍師,南將軍現在想知道第m號到第n號士兵的總殺敵數,請你幫助小工來回答南將軍吧。

注意,南將軍可能會問很多次問題。

輸入

只有一組測試資料

第一行是兩個整數n,m,其中n表示士兵的個數(1

輸出對於每乙個詢問,輸出總殺敵數

每個輸出佔一行

樣例輸入

5 2

1 2 3 4 5

1 32 4

樣例輸出

6

9

**[張云聰]原創

上傳者

張云聰#include

#define maxn 1000000

int a[maxn]=;

int sum[maxn]=;

int main()

while(m--)

return 0;

}這個**已ac

#include

#define maxn 1000000

int a[maxn]=;

int main()

while(m--)

printf("%d\n",sum);

}return 0;

}這個**輸進去時間超限,可能是m到n的那個迴圈讓**速度變慢

陣列申明在函式內部,屬於區域性變數,存放在了棧上,

看看陣列占用的記憶體大小:1000000=1000*1000然後乘以int型資料長度

1000*1000*4byte約等於4m,

而棧的預設記憶體空間為1m左右,所以會導致記憶體溢位

解決這個問題,可以將陣列申明在全域性儲存區或堆上即可

方法一:申明為全域性變數

方法二:存放在堆上

看別人的部落格是這樣寫的,好像用的樹狀陣列,水平太次,不是太懂,**如下

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

int c[1000005];//樹狀陣列

int n;//士兵個數

int m;//詢問次數

int x,y;//詢問區間

int lowbit(int x)

void add(int i,int x)

}int sum(int i)

return sum;

}int main()

for(int i=1; i<=m; i++)       

}    

return 0;}

nyoj 108 士兵殺敵(一)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 南將軍手下有n個士兵,分別編號1到n,這些士兵的殺敵數都是已知的。小工是南將軍手下的軍師,南將軍現在想知道第m號到第n號士兵的總殺敵數,請你幫助小工來回答南將軍吧。注意,南將軍可能會問很多次問題。輸入 只有一組測試資料 第一行是...

NYOJ 108 士兵殺敵(一)

時間限制 1000 ms 記憶體限制 65535 kb難度 3 描述 南將軍手下有n個士兵,分別編號1到n,這些士兵的殺敵數都是已知的。小工是南將軍手下的軍師,南將軍現在想知道第m號到第n號士兵的總殺敵數,請你幫助小工來回答南將軍吧。注意,南將軍可能會問很多次問題。輸入 只有一組測試資料 第一行是兩...

NYOJ 108士兵殺敵(一)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 南將軍手下有n個士兵,分別編號1到n,這些士兵的殺敵數都是已知的。小工是南將軍手下的軍師,南將軍現在想知道第m號到第n號士兵的總殺敵數,請你幫助小工來回答南將軍吧。注意,南將軍可能會問很多次問題。輸入只有一組測試資料 第一行是兩...