WEEK5 周记 作业——差分数组_TT的魔法猫
WEEK5 周記 作業(yè)——差分?jǐn)?shù)組_TT的魔法貓
一、題意
1.簡(jiǎn)述
現(xiàn)有n個(gè)城市,第iii個(gè)城市有一個(gè)資產(chǎn)值a[i]a[i]a[i],每次操作讓區(qū)間[l,r][l,r][l,r]中的城市資產(chǎn)增加ccc,要求qqq操作結(jié)束后,給出每個(gè)城市的資產(chǎn)值。
2.輸入格式
第一行2個(gè)整數(shù):nnn,qqq,(1≤n,q≤2×105)(1 \le n,q \le 2 \times 10^5)(1≤n,q≤2×105)——城市的數(shù)量和操作的次數(shù)。
第二行包含nnn個(gè)整數(shù):a1,a2,...an(?106≤ai≤106)a_1,a_2,...a_n(-10^6 \le a_i \le 10^6)a1?,a2?,...an?(?106≤ai?≤106) ——每個(gè)城市的資產(chǎn)值。
下面跟著qqq行,每行代表一個(gè)操作。每一行有3個(gè)數(shù):lll,rrr,ccc(1≤l≤r≤n,?105≤c≤105)(1 \le l \le r \le n,-10^5\le c \le 10^5)(1≤l≤r≤n,?105≤c≤105)。
3.輸出格式
輸出nnn個(gè)整數(shù)——nnn個(gè)城市的最終資產(chǎn)值。
4.樣例
Input_1
4 2
-3 6 8 4
4 4 -2
3 3 1
Output_1
-3 6 9 2
Input_2
2 1
5 -2
1 2 4
Output_2
9 2
二、算法
主要思路
首先看看暴力行不行。最多有2×1052 \times 10^52×105次操作,每次操作最多修改2×1052 \times 10^52×105個(gè)值,顯然時(shí)間要超過1s。
考慮差分。差分?jǐn)?shù)組可以在O(1)O(1)O(1)的時(shí)間復(fù)雜度內(nèi)修改原數(shù)組一個(gè)區(qū)域內(nèi)的所有元素的值(增/減相同的ccc)。獲取原數(shù)組一個(gè)元素則需要O(n)O(n)O(n),獲取原數(shù)組所有元素的值也只需要O(n)O(n)O(n)。
差分?jǐn)?shù)組的構(gòu)建:B[1]=A[1]B[1] = A[1]B[1]=A[1]B[i]=A[i]?A[i?1]B[i] = A[i]-A[i-1]B[i]=A[i]?A[i?1]所以∑B[i]=A[i]\sum B[i]= A[i]∑B[i]=A[i]A[L]~A[R]均價(jià)上c等價(jià)于B[L]+=cB[L] += cB[L]+=cB[R+1]?=cB[R+1] -= cB[R+1]?=c
所以按照公式,每次操作我們只需要花費(fèi)O(1)O(1)O(1)的時(shí)間,最終輸出所有資產(chǎn)值的時(shí)間復(fù)雜度為O(n)O(n)O(n)。輸出每一個(gè)資產(chǎn)值只需要利用公式:A[i]=A[i?1]+B[i]A[i]=A[i-1]+B[i]A[i]=A[i?1]+B[i]就能依次輸出。
題外
小心B數(shù)組的數(shù)據(jù)范圍,這里應(yīng)該用long long 類型,因?yàn)閷?duì)一個(gè)B數(shù)組的元素是有可能加q次c的,按照q和c的數(shù)據(jù)范圍能看出這種情況下用int是會(huì)爆精度的。
三、代碼
#include<iostream> #include <cmath> #include<sstream> #include<string> #include<cstdlib> #include<cstring> using namespace std; int a[200010]; long long int b[200010];//又爆了int的精度。。 int main() {int n,q,i,j;scanf("%d%d",&n,&q);for(i=1;i<=n;i++) scanf("%d",&a[i]);b[1]=a[1];for(i=2;i<=n;i++) b[i]=a[i]-a[i-1];for(i=0;i<q;i++){int l,r,c;scanf("%d%d%d",&l,&r,&c);b[l]+=c;b[r+1]-=c;}long long int sum=b[1];printf("%d",sum);if(n>1)printf(" "); for(i=2;i<=n;i++){sum=b[i]+sum;printf("%lld",sum);if(i<=n-1) printf(" ");}return 0; }總結(jié)
以上是生活随笔為你收集整理的WEEK5 周记 作业——差分数组_TT的魔法猫的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [HDOJ 4889] Scary Pa
- 下一篇: 寻宝游戏(DFS+动态规划)