題目就不抄了,終於用c++a了這道題
有幾點需要注意的
1.k<<1|1而不是k<<1||1
2.程式如果中途退出,printf積累的結果將不會輸出,必須碰到cout也就是說,如果需要除錯輸出資訊,盡量用cout
**:
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #includeview code10 #include11
#define inf 1000000000
12#define maxn 50000+100
13#define maxm 2000000
14#define eps 1e-10
15#define ll long long
16using
namespace
std;
17 inline int
read()
1821
while(ch>='
0'&&ch<='9')
22return x*f;23}
24int
n,m,tot,a[maxn],l[maxm],r[maxm],s[maxm],rnd[maxm],w[maxm],v[maxm];
25struct rect[4*maxn];
26 inline void pushup(int
k)27
28 inline void rturn(int &k)
29 30 inline void lturn(int &k)
31 32
void ins(int &k,int
num)
3336 s[k]++;
37if(v[k]==num)w[k]++;
38else
if(num
39
40else
41 42}
43void del(int &k,int
num)
4448
else
if(l[k]*r[k]==0)k=l[k]+r[k];
49else
if(rnd[l[k]]
5051
else 52
return;53
}54 s[k]--;
55if(numelse
del(r[k],num);56}
57int rank(int k,int
num)
5864
int pre(int k,int
num)
6573}74
int suc(int k,int
num)
7583}84
void build(int k,int x,int
y)85
91void change(int k,int x,int
y)92
98int query(int k,int x,int y,int
z)99
106int getpre(int k,int x,int y,int
z)107
114int getsuc(int k,int x,int y,int
z)115
122123
intmain()
124
137else
148 printf("
%d\n
",r);
149}
150if(ch==1)printf("
%d\n
",query(1,x,y,z)+1
);151
if(ch==4)printf("
%d\n
",getpre(1
,x,y,z));
152if(ch==5)printf("
%d\n
",getsuc(1
,x,y,z));
153}
154155
}156
return0;
157 }
BZOJ3196 Tyvj 1730 二逼平衡樹
description 您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列,其中需要提供以下操作 1.查詢k在區間內的排名 2.查詢區間內排名為k的值 3.修改某一位值上的數值 4.查詢k在區間內的前驅 前驅定義為小於x,且最大的數 5.查詢k在區間內的後繼 後繼定義為大於x,且最小的數 in...
bzoj3196 Tyvj 1730 二逼平衡樹
description 您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列,其中需要提供以下操作 1.查詢k在區間內的排名 2.查詢區間內排名為k的值 3.修改某一位值上的數值 4.查詢k在區間內的前驅 前驅定義為小於x,且最大的數 5.查詢k在區間內的後繼 後繼定義為大於x,且最小的數 in...
bzoj3196 Tyvj 1730 二逼平衡樹
傳送門 終於把這個大坑填完了。sb樹套樹 看似最不合理的方案恰恰是正確方案,樹套樹並不會mle,它的空間複雜度非常科學,o nlogn 結果因為空間算錯陣列開小神奇的t掉,浪費了我兩天時間 嘛。貌似除了操作二沒什麼好說的。轉換成判定性問題就好了,二分o nlog 3 n 解決。其他按照正常線段樹和平...