筱瑪是乙個熱愛線段樹的好筱瑪。
筱瑪的爺爺馬爺在遊戲中被筱瑪吊打了,於是他惱羞成怒,決定給筱瑪出這樣一道資料結構題:
給定乙個長度為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示例1'>nn個數,表示m
'>mm次操作結束後,a1∼
an'>a1∼ana1∼an的值。
複製
4 31 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...