題目簡述:
一開始你有乙個數x=
0 x=0
n(n≤106)
n (n
≤106)
次操作:
1.給x
x
加上a×
2k' role="presentation" style="position: relative;">a×2
ka×2
k(a≤
109,k
≤3×10
7)( a≤
109,k
≤3×10
7)
2.查詢
x x
的二進位制表達表示2b
(b≤3
×107)
' role="presentation" style="position: relative;">2b(
b≤3×
107)2
b(b≤
3×107
)的那位的值
根據最基本的均攤分析,我們知道只支援加的二進位制計數器均攤複雜度是o(
1)o (1
)的
所以如果本題只支援加法的話可以利用un
sign
edin
t uns
igne
dint
壓位 複雜度可以達到o(
30n32)
=o(n
) o(30
n32)=
o(n)
但是可能產生減法怎麼辦?
大力維護乙個加法的結果
再維護乙個減法的結果
查詢怎麼辦?
大力比較字尾的大小即可 利用s
ets et
記錄大小不同的塊的編號
所以這是道分塊題2333
總複雜度o(
30n32l
og230
n32)=
o(nl
og2n
) o(30
n32lo
g230n
32)=o
(nlo
g2n)
實際上根本跑不滿,
還是很快的
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn=1000010;
typedef
unsigned
long
long lsq;
lsq plus[maxn],minus[maxn];
setst;
set::iterator it;
int n,t1,t2,t3,opt;
int main()
}else
if(a<0)}}
else}}
}
NOI2017 整數 解題報告
有一些比較簡單的 log 2n 做法 比如暴力在動態開點線段樹上維護每個位置為 0 還是 1 我們發現涉及到某一位加上 1 或者減去 1 實際上對其他位的影響只有區間覆蓋,通過線段樹上二分可以得到區間覆蓋的位置,然後暴力區間覆蓋即可。反正我這種菜雞大常數寫法只得到了68分.考慮利用勢能,注意到如果同...
noi2017 整數 線段樹or模擬
orzyyb 題目大意 你需要維護乙個有 3 times 10 7 個二進位制位的數,有一種修改方式和一種詢問方式 對這個數加上 a times2 b 其中 a 10 9 b 3 times 10 7 保證需要維護的這個數始終非負 詢問這個數第k個二進位制位的值 總共有 10 6 次詢問 修改操作 ...
題解 NOI2017整數 線段樹
在人類智慧型的山巔,有著一台字長為10485761048576位 此數字與解題無關 的超級計算機,著名理論計算機科 學家p博士正用它進行各種研究。不幸的是,這天颱風切斷了電力系統,超級計算機 無法工作,而 p 博士明天就要交實驗結果了,只好求助於學過oi的你.p 博士將他的計算任務抽象為對乙個整數的...