[問題] HackerRank - 陣列的相關問題
題目: 輸入N與M,N表示陣列個數,M表示操作次數。陣列初始值為0。
操作內容為輸入a, b, k。a代表第a個元素,b代表第b個元素。
將a至b的元素(包含a, b兩個位置的元素)加上整數k。
最後找出陣列元素中最大值。
Sample Input:
5 3
1 2 100
2 5 100
3 4 100
表示N=5, M=3,
所以代表陣列元素有五個,操作次數為三,所以有以下三行操作
第一次操作: a=1, b=2, k=100
第二次操作: a=2, b=5, k=100
第三次操作: a=3, b=4, k=100
Sample Output:
200
Explanation:
第一次操作: 100 100 0 0 0.
第二次操作: 100 200 100 100 100.
第三次操作: 100 200 200 200 100.
所以最大值為 200.
Solution:
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
long int N,K,p,q,sum,i,j,max=0,x=0;
cin>>N>>K;
long int *a=new long int[N+1]();
for(i=0;i<K;i++)
{
cin>>p>>q>>sum;
a[p]+=sum;
if((q+1)<=N) a[q+1]-=sum;
}
for(i=1;i<=N;i++)
{
x=x+a[i];
if(max<x) max=x;
}
cout<<max;
return 0;
}
小弟資質愚鈍,一直不懂這個解答的邏輯與演算法,
坦白說思考了兩天,還是看不太懂QQ
請問有哪位大大懂程式碼的想法是什麼嗎?
感激不盡!!!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.166.24.39
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1515157763.A.C4A.html
→
01/05 21:17,
6年前
, 1F
01/05 21:17, 1F
→
01/05 21:21,
6年前
, 2F
01/05 21:21, 2F
→
01/05 22:42,
6年前
, 3F
01/05 22:42, 3F
→
01/05 23:00,
6年前
, 4F
01/05 23:00, 4F
推
01/05 23:09,
6年前
, 5F
01/05 23:09, 5F
→
01/05 23:17,
6年前
, 6F
01/05 23:17, 6F
→
01/06 03:56,
6年前
, 7F
01/06 03:56, 7F
→
01/06 03:57,
6年前
, 8F
01/06 03:57, 8F
→
01/06 03:57,
6年前
, 9F
01/06 03:57, 9F
→
01/06 03:57,
6年前
, 10F
01/06 03:57, 10F
推
01/06 07:44,
6年前
, 11F
01/06 07:44, 11F
→
01/06 07:49,
6年前
, 12F
01/06 07:49, 12F
→
01/06 22:57,
6年前
, 13F
01/06 22:57, 13F