思維題 倒序差分的運用

2022-05-28 13:57:12 字數 2055 閱讀 4592

筱瑪是乙個熱愛線段樹的好筱瑪。

筱瑪的爺爺馬爺在遊戲中被筱瑪吊打了,於是他惱羞成怒,決定給筱瑪出這樣一道資料結構題:

給定乙個長度為n

'>nn的陣列a

'>aa,剛開始每一項的值均為0

'>00。

支援以下兩種操作,操作共m

'>mm次:

1 l r

'>1 l r1 l r:將al∼

ar'>al∼aral∼ar的每一項的值加上1

'>11。

2 l r

'>2 l r2 l r:執行操作編號在[l,

r]'>[l,r][l,r]內的所有操作各一次,保證r

'>rr小於當前操作的編號。

m'>mm次操作結束後,你要告訴馬爺a

'>aa陣列變成什麼樣子了。

由於答案可能會很大,你只需要輸出陣列a

'>aa中的每個數在模109+

7'>109+7109+7意義下的值。

第一行兩個數n,m

'>n,mn,m,分別表示陣列長度及操作次數。

接下來m

'>mm行,每行三個數opt

,l,r

'>opt,l,ropt,l,r,表示一次操作。

輸出一行共n

'>nn個數,表示m

'>mm次操作結束後,a1∼

an'>a1∼ana1∼an的值。

示例1

複製

4 3

1 1 3

2 1 1

1 1 3

複製

3 3 3 0

對於100%的資料,1≤n

≤105,

1≤m≤

105'>1≤n≤105,1≤m≤1051≤n≤105,1≤m≤105。

//

#pragma comment(linker, "/stack:1024000000,1024000000")

//#pragma gcc optimize(2)

//#include

#include #include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

double

dou;

typedef

long

long

ll;typedef pair

pii;

#define pai acos(-1.0)

#define m 200005

#define inf 1e18

#define mod 1000000007

#define left k<<1

#define right k<<1|1

#define w(a) while(a)

#define ms(a,b) memset(a,b,sizeof(a))

struct

data

num[m];

//操作

ll n, m, pos, pre;

ll ans[m], cnt[m];

//ans為差分序列,cnt為操作次數

void

init()

intmain()

init();

for (int i = m; i >= 1; i--)

else

}for (int i = 1; i <= n; i++)

return0;

}

1≤n

≤105,

1≤m≤

105'>

思維題 集合hash 樹上差分 11 5擼樹

要注重問題的轉化和一些結論的推斷 要致富,先擼樹。一棵樹的形狀可以簡化為一張 n 個點 m 條邊的圖,由於裝備條件限制,你只有擼兩次,也就是刪去兩條邊,當這張圖不聯通時,就意味著樹倒了。現在你想知道有多少種方案能擼倒這棵樹。第一行兩個正整數 n,m 接下來 m 行,每行兩個正整數,表示一條邊。輸出乙...

LZH的多重影分身 qduoj 思維 差分

下面的題解是我們厲害的學長給的,真是太厲害了。對於每乙個點,我們都可以計算出該點平移到線段上的距離的範圍 我們用正數代表向數軸正向移動,用負數代表向數軸負向移動 比如,有乙個點位於數軸上 4 的位置,有兩條線段 1,2 5,6 則可以讓該點移動到線段上的平移距離的範圍為 3,2 1,2 所以我們可以...

運用指標實現將字串中的數字倒序輸出其他元素不變

用指標編寫程式,實現輸入乙個字串後,將其 現的所 有數字進行倒置。注 字串長度 n 100 樣例輸入 a dg235sf86 e9 樣例輸出 a dg968sf53 e2 include intmain if s 0 s 9 if p 0 p 9 printf s a return0 2w34er4...