鏈結
考慮對操作二進位制分組。每個塊內維護這個區間的操作把整個序列分成的段數(每一段有兩個值a,b
a,ba,
b代表這一段的真實值為ax+
bax+b
ax+b
)。比如相交的兩個操作會形成3段,分別為a1x
+b
a_1x+b
a1x+b
,a 1a
2x+a
2b1+
b2,a
2x+b
2a_1a_2x+a_2b_1+b_2,a_2x+b_2
a1a2
x+a2
b1
+b2
,a2
x+b2
由於運算元是o(n
)o(n)
o(n)
的,所以序列分成的段數也是o(n
)o(n)
o(n)
的。合併時計算新的段即可。
#include
using
namespace std;
typedef
long
long lint;
const
int maxn =
600005
;int t, n, mod, q;
int val[maxn]
, tot, id[maxn]
, l[maxn *4]
, r[maxn *4]
;struct node
t[maxn *30]
;int cnt;
inline
intgi()
#define lch (s << 1)
#define rch (s << 1 | 1)
#define mid ((l + r) >> 1)
void
build
(int s,
int l,
int r)
void
insert
(int l,
int r,
int a,
int b)
; t[
++cnt]
=(node);if
(r < n) t[
++cnt]
=(node)
; r[id[tot]
]= cnt;
int s = id[tot]
, i, j, n1, n2;
while
((s &1)
&& s >1)
;if(t[i]
.p == t[j]
.p)++i,
++j;
else
if(t[i]
.p < t[j]
.p)++i;
else
++j;
} r[s]
= cnt;}}
void
calc
(int s,
int x,
int&v)
v =((lint)t[l]
.a * v + t[l]
.b)% mod;
}void
query
(int s,
int l,
int r,
int x,
int y,
int p,
int&v)
intmain()
else
}return0;
}
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...
判斷二進位製半整數(二進位制)
10年後,tokitsukaze大佬已經變成了年收入超百萬的的精英程式設計師,家裡沒錢也沒礦的teitoku,找tokitsukaze大佬借1000塊錢,然後tokitsukaze大佬說,借你1024吧,湊個整數。沒錯在2進製下1024是 二進位制整數 乙個正整數滿足其值為2的k次方 k為正整數 我...
mysql二進位制 MySql二進位制連線方式詳解
使用mysql二進位制方式連線 您可以使用mysql二進位制方式進入到mysql命令提示符下來連線mysql資料庫。例項以下是從命令列中連線mysql伺服器的簡單例項 root host mysql u root p enter password 在登入成功後會出現 mysql 命令提示視窗,你可以...