0 Judge
Code: 0
咖波覺得計算小雞的飽足感有點累。好險聰明的咖波很快就發現更好的方法。
咖波發現,小雞是可以合成和分割的。於是他這麼做:
咖波先把N隻大小不同的小雞排成一直線,飽足感由左至右為$H_1,H_2,\cdots H_n$,咖波可以任選連續的小雞$H_l,H_{l+1},H_{l+2}.....H_r$,把這些小雞的大小同時增加或減少一個數值$V$。要是小雞變得太小,飽足感也可能會小於零(消化的耗能還比不上得到的能量)。
最後咖波想知道最大的小雞和最小的小雞,相差多少飽足感。但是咖波只想快點繼續進食。你能幫咖波解決這個問題嗎?
你必須上傳一個指定函數,其函數原型如下:
int Answer(int N,int P,int *H,int *L,int *R,int *V);
參數意義代表如下:
N
:小雞的數量P
:修改的次數H[0],H[1]...H[N−1]
:小雞一開始的大小L[0],L[1]...L[P−1]
:每次修改的左界R[0],R[1]...R[P−1]
:每次修改的右界V[0],V[1]...V[P−1]
:每次修改增加的大小回傳值意義代表如下:
一個整數,為完成操作後,最大和最小的小雞大小差多少。
我們可以參考這一個範例:
N=5
P=3
H[]={0,0,1,0,1}
L[]={1,2,1}
R[]={3,5,1}
V[]={1,−1,2}
代表有5隻小雞,大小分別為{0,0,1,0,1}
,接下來有3次修改。
第一次修改的區間為$H_1∼H_3$,增加大小$1$,修改完後小雞大小為{1,1,2,0,1}
第二次修改的區間為$H_2∼H_5$,增加大小$-1$,修改完後小雞大小為{1,0,1,−1,0}
第三次修改的區間為$H_1∼H_1$,增加大小$2$,修改完後小雞大小為{3,0,1,−1,0}
於是答案為最大減最小,即$3−(−1)=4$。
函式被使用的次數不超過一次
為方便您撰寫此題,下提供範例程式,在指定位置撰寫您的程式碼即可。下提供測試資料的輸入方法。
第一行有兩個數字:$N,P$,接下來下一行有$N$個數字,分別代表$H[i]$的數值,在接下來有$P$行,每行有三個數字,分別為$L[i],R[i],V[i]$
直接輸出Answer的回傳值。
5 3
0 0 1 0 1
1 3 1
2 5 -1
1 1 2
4
配分 | 限制 |
---|---|
9% | $N \leq 5, P = 1$ |
11% | $N \leq 5$ |
15% | $P=0$ |
15% | $P \leq 10^4$ |
20% | 修改的區間全部不相交 |
30% | 沒有限制 |
#ifndef EVAL
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int Answer(int N,int P,int *H,int *L,int *R,int *V);
int main()
{
const int maxN = 1000000;
const int maxP = 1000000;
int *H = new int[maxN];
int *L = new int[maxP];
int *R = new int[maxP];
int *V = new int[maxP];
int N,P;
while( cin>>N>>P )
{
for(int i=0;i<N;++i)
cin>>H[i];
for(int i=0;i<P;++i)
cin>>L[i]>>R[i]>>V[i];
cout<<Answer(N,P,H,L,R,V)<<endl;
}
}
#endif
/*================================================================*/
/*================================================================*/
/*================================================================*/
/*================================================================*/
/*Write Your Program Here*/
/*Notice: You should include header for yourself*/
int Answer(int N,int P,int *H,int *L,int *R,int *V)
{
}