NYOJ 228 士兵殺敵(五)(陣列靈活運用)

2021-07-05 00:20:59 字數 1184 閱讀 3582

時間限制:

2000 ms  |  記憶體限制:

65535 kb

難度: 5

描述 南將軍麾下有百萬精兵,現已知共有m個士兵,編號為0~m,每次有任務的時候,總會有一批編號連在一起人請戰(編號相近的人經常在一塊,相互之間比較熟悉),最終他們獲得的軍功,也將會平分到每個人身上,這樣,有時候,計算他們中的哪乙個人到底有多少軍功就是乙個比較困難的事情。

在這樣的情況下,南將軍卻經常會在許多次戰役之後詢問軍師小工第i號士兵到第j號士兵所有人的總軍功數。

請你幫助軍師小工回答南將軍的提問。

輸入

只有一組測試資料

第一行是三個整數n,c,q(1<=n,c,q<=1000000),其中n表示士兵的總數。

隨後的c行,每行有三個整數mi,ni,ai(0<=mi<=ni<=n,0<=ai<=100),表示從第mi號到第ni號士兵所有人平均增加了ai的軍功。

再之後的q行,每行有兩個正正數m,n,表示南將軍詢問的是第m號士兵到第n號士兵。

輸出請對每次詢問輸出m號士兵到第n號士兵的總軍功數,由於該數值可能太大,請把結果對10003取餘後輸出

樣例輸入

5 3 2

1 3 2

2 4 1

5 5 10

1 52 3

樣例輸出

19

6

思路:這是一道妙用陣列的題,由於問題都是在更新完所有以後問的,所以剛開始時可以不用更新,記錄下來需要更新的,

當輸入完後再一次更新,求出每個點的值,之後再求出前n項和就可以了

開始用線段樹寫,tle,然後看到別人用陣列,看了之後簡直跪了,太6了

線段樹tle**就不貼了

ac**:

#include#include#include#include#include#define inf 0x7fffffff

#define maxn 1000000+10

#define max(a,b) a>b?a:b

#define min(a,b) a>b?b:a

using namespace std;

int num[maxn];

int main()

{ int i,a,b,c,n,m,k;

scanf("%d%d%d",&n,&m,&k);

for(i=0;i

NYOJ 228 士兵殺敵(五)

時間限制 2000 ms 記憶體限制 65535 kb難度 5 描述 南將軍麾下有百萬精兵,現已知共有m個士兵,編號為0 m,每次有任務的時候,總會有一批編號連在一起人請戰 編號相近的人經常在一塊,相互之間比較熟悉 最終他們獲得的軍功,也將會平分到每個人身上,這樣,有時候,計算他們中的哪乙個人到底有...

NYOJ 228 士兵殺敵(五)

時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述 南將軍麾下有百萬精兵,現已知共有m個士兵,編號為0 m,每次有任務的時候,總會有一批編號連在一起人請戰 編號相近的人經常在一塊,相互之間比較熟悉 最終他們獲得的軍功,也將會平分到每個人身上,這樣,有時候,計算他們中的哪乙個人到底...

nyoj 228 士兵殺敵(五)

題目 由於該題一開始是進行士兵軍功增加,最後才是查詢士兵的軍功總和,使用乙個陣列,進行延遲更新 就是某段進行新增時吧首位進行標記,最後一位的下一位進行標記 然後進行一次總的更新,求和 這個題值得注意的是,該題的士兵編號是從0開始 而不是1開始,include include define mod 1...