在人類智慧型的山巔,有著一台字長為10485761048576位(此數字與解題無關)的超級計算機,著名理論計算機科
學家p博士正用它進行各種研究。不幸的是,這天颱風切斷了電力系統,超級計算機
無法工作,而 p 博士明天就要交實驗結果了,只好求助於學過oi的你. . . . . .
p 博士將他的計算任務抽象為對乙個整數的操作。
具體來說,有乙個整數xx,一開始為00。
接下來有nn個操作,每個操作都是以下兩種型別中的一種:
保證在任何時候,x\geqslant 0x⩾0。
輸入格式:
輸入的第一行包含四個正整數n,t_1,t_2,t_3n,t1,t2,t3,nn的含義見題目描述,t_1t1,t_2t2,t_3t3的具體含義見子任務。
接下來nn行,每行給出乙個操作,具體格式和含義見題目描述。
同一行輸入的相鄰兩個元素之間,用恰好乙個空格隔開。
輸出格式:
對於每個詢問操作,輸出一行,表示該詢問的答案(00或11)。對於加法操作,沒有任何輸出。
輸入樣例#1: 複製
10 3 1 2輸出樣例#1: 複製1 100 0
1 2333 0
1 -233 0
2 52 7
2 15
1 5 15
2 15
1 -1 12
2 15
010在所有測試點中,1\leqslant t_1 \leqslant 3, 1 \leqslant t_2 \leqslant 4, 1 \leqslant t_3 \leqslant 21⩽t1⩽3,1⩽t2⩽4,1⩽t3⩽2。不同的 t_1, t_2, t_3t1,t2,t3對應的特殊限制如下:10
本題共 25 個測試點,每個測試點 4 分。各個測試點的資料範圍如下:
我們可以把二進位制整數每30位壓在乙個int裡面,然後進行加的操作時就是找到連續1後面的第乙個0,再區間把1改成0,把第乙個0改成1,
可以用區間or和區間and找出0,1的位置,並且可用線段樹維護
(慶祝通過noip2018第三題)
#include
2#define n 1000005
3using
namespace
std;
4const
int inf=(1
<<30)-1;
5const
int m=1000000;
6struct
nodetree[n*4];
9int n,t,a,b,res,op,x,pos,loc;
10void
read
()15
void
add(int p,int l,int r,int v) 20
void
pushdown
(int p,int l,int r,int mid)
26int
query_ans
(int p,int l,int r,int x) 36
intfind0
(int p,int l,int r,int x)
else
46 res=find0(p<<1|1,mid+1,r,x);
47return res;
48}49
intfind1
(int p,int l,int r,int x)
else
59 res=find1(p<<1|1,mid+1,r,x);
60return res;
61}62
void
modify
(int p,int l,int r,int x,int y,int v)
67int mid=l+r >> 1;
68if (l>r||l>y||rreturn;
69 pushdown(p,l,r,mid);
70if (x<=mid) modify(p<<1,l,mid,x,y,v);
71if (y>mid) modify(p<<1|1,mid+1,r,x,y,v);
72 tree[p].and=tree[p<<1].and&tree[p<<1|1].and;
73 tree[p].or=tree[p<<1].or|tree[p<<1|1].or;
74}75
76void
inc(int num,int pos)
else
85 modify(1,0,m,pos,pos,res);
86}87
void
dec(int num,int pos)
else
96 modify(1,0,m,pos,pos,res);
97}98
void
solve
() else
112 } else
117 }
118}
119signed
main()
noi2017 整數 線段樹or模擬
orzyyb 題目大意 你需要維護乙個有 3 times 10 7 個二進位制位的數,有一種修改方式和一種詢問方式 對這個數加上 a times2 b 其中 a 10 9 b 3 times 10 7 保證需要維護的這個數始終非負 詢問這個數第k個二進位制位的值 總共有 10 6 次詢問 修改操作 ...
noi2017 整數 線段樹or模擬
orzyyb 題目大意 你需要維護乙個有 3 times 10 7 個二進位制位的數,有一種修改方式和一種詢問方式 對這個數加上 a times2 b 其中 a 10 9 b 3 times 10 7 保證需要維護的這個數始終非負 詢問這個數第k個二進位制位的值 總共有 10 6 次詢問 修改操作 ...
NOI2017模擬4 2 查詢 線段樹
給出若干條線段,用 x1,y1 x2,y2 表示其兩端點座標,現在要求支援兩種操作 0 x1 y1 x2 y2 表示加入一條新的線段,x1,y1 x2,y2 1 x0 詢問所有線段中,x座標在x0處的最高點的y座標是什麼,如果對應位置沒有線段,則輸出0。o nlog 2n 的 include inc...