<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Beyond the Void &#187; Zju</title>
	<atom:link href="http://www.byvoid.com/blog/cate/slns/zju-slns/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.byvoid.com/blog</link>
	<description></description>
	<lastBuildDate>Tue, 29 Jun 2010 08:44:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Dynamic Rankings 动态排名系统 (zju 2112)</title>
		<link>http://www.byvoid.com/blog/zju-2112/</link>
		<comments>http://www.byvoid.com/blog/zju-2112/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 11:59:33 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[Zju]]></category>
		<category><![CDATA[2112]]></category>
		<category><![CDATA[Treap]]></category>
		<category><![CDATA[zju]]></category>
		<category><![CDATA[动态]]></category>
		<category><![CDATA[排名]]></category>
		<category><![CDATA[树套树]]></category>
		<category><![CDATA[线段树]]></category>
		<category><![CDATA[细节]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=853</guid>
		<description><![CDATA[解决这个和问题，需要用到“树套树”。建立一棵线段树，维护N的节点的所有区间，每个线段树节点上有一个平衡树，用来维护当前区间内所有数的动态排名。很显然，每个线段树节点上的平... ]]></description>
			<content:encoded><![CDATA[<p>解决这个和问题，需要用到“树套树”。建立一棵线段树，维护N的节点的所有区间，每个线段树节点上有一个平衡树，用来维护当前区间内所有数的动态排名。很显然，每个线段树节点上的平衡树，都是这个线段树节点的两个子节点的平衡树的合并。由于我们无法实现高效的平衡树合并，只好用这种以空间换时间的方法。</p>
<p>对于每个修改操作，只需先在线段树找出单位区间[i,i]上平衡树中的唯一节点，就是A[i]的原值，然后把线段树从根到该节点路径上所有节点的平衡树中都删除掉A[i]的原值，然后插入新值j。</p>
<p>查询操作为比较特殊，因为给定的区间[i,j]可能对应线段树中若干个区间的并，所以首先找出这对应的q区间的平衡树T[1],T[2],T[3],&#8230;,T[q]，找出其中的最大值Max和最小值Min，然后在[Min,Max]之间二分答案。对于给定的答案r，判断是符合要求，否则按照单调性缩小二分区间。</p>
<p>如何求给定的r值的总排名，由于r可能不在某些甚至所有的q个平衡树中，所以有时求r的排名是没有意义的，换而我们可以求r在所有平衡树中后继的最小值MinSucc的排名。对于第i个平衡树，要求r在T[i]中的后继(不大于r的最小值)的排名S[i]，MinSucc的排名就是k1=Σ{S[i]-1} + 1。但是相同的MinSucc的值可能会有多个，所以MinSucc的排名实际上是属于一个区间的，应在所有的平衡树中找出MinSucc一共的个数Count，MinSucc的最大排名就是k2=k1+Count-1。如果k属于[k1,k2]，那么结果就是MinSucc。如果k2&lt;k，则应向增大的方向二分答案，否则向减小的方向二分答案。</p>
<p>代码很长，最后一句话，细节决定成败！</p>
<p><strong>感谢slxg</strong>，正如你所说的，我写错了。现在错误已经修正。看来zju的数据还是不够强大，原来有点错的也能AC。</p>
<p><span id="more-853"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p853code2'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8532"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
</pre></td><td class="code" id="p853code2"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: Zju2112 dynrank
 * Author: Guo Jiabao
 * Time: 2009.2.9 14:14
 * State: Solved
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> treap_node
<span style="color: #008000;">&#123;</span>
	treap_node <span style="color: #000040;">*</span>left,<span style="color: #000040;">*</span>right<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> v,fix,size,weight<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> lsize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> left <span style="color: #008080;">?</span>left <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>size<span style="color: #008080;">:</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> rsize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> right<span style="color: #008080;">?</span>right<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>size<span style="color: #008080;">:</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> sgt_node
<span style="color: #008000;">&#123;</span>
	sgt_node <span style="color: #000040;">*</span>left,<span style="color: #000040;">*</span>right<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> a,b<span style="color: #008080;">;</span>
	treap_node <span style="color: #000040;">*</span>treap<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">50001</span>,MAXM<span style="color: #000080;">=</span><span style="color: #0000dd;">10001</span>,INF<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFFF</span><span style="color: #000040;">/</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXTN<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>MAXN<span style="color: #000040;">+</span>MAXM<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">16</span>,MAXSN<span style="color: #000080;">=</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
treap_node TS<span style="color: #008000;">&#91;</span>MAXTN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
sgt_node SS<span style="color: #008000;">&#91;</span>MAXSN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> D,N,M,TC,SC,Tcnt<span style="color: #008080;">;</span>
sgt_node <span style="color: #000040;">*</span>sgt_root<span style="color: #008080;">;</span>
treap_node <span style="color: #000040;">*</span>T<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> treap_node<span style="color: #000040;">*</span> new_treap_node<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> v<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	TS<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>TC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v</span><span style="color: #000080;">=</span>v<span style="color: #008080;">;</span>
	TS<span style="color: #008000;">&#91;</span>TC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">left</span><span style="color: #000080;">=</span>TS<span style="color: #008000;">&#91;</span>TC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">right</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	TS<span style="color: #008000;">&#91;</span>TC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">size</span><span style="color: #000080;">=</span>TS<span style="color: #008000;">&#91;</span>TC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">weight</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	TS<span style="color: #008000;">&#91;</span>TC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">fix</span><span style="color: #000080;">=</span><span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #000040;">&amp;</span>TS<span style="color: #008000;">&#91;</span>TC<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> treap_rotate_right<span style="color: #008000;">&#40;</span>treap_node <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	treap_node <span style="color: #000040;">*</span>q<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008080;">;</span>
	q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
	p<span style="color: #000080;">=</span>q<span style="color: #008080;">;</span>
	q<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008080;">;</span>
	q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>size<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>lsize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>rsize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>size<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>lsize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>rsize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> treap_rotate_left<span style="color: #008000;">&#40;</span>treap_node <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	treap_node <span style="color: #000040;">*</span>q<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008080;">;</span>
	q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
	p<span style="color: #000080;">=</span>q<span style="color: #008080;">;</span>
	q<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008080;">;</span>
	q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>size<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>lsize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>rsize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>size<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>lsize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>rsize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> treap_find<span style="color: #008000;">&#40;</span>treap_node <span style="color: #000040;">*</span>p,<span style="color: #0000ff;">int</span> v<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>p<span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>v<span style="color: #000080;">&lt;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> treap_find<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left,v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>v<span style="color: #000080;">&gt;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> treap_find<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right,v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		<span style="color: #0000ff;">return</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> treap_insert<span style="color: #008000;">&#40;</span>treap_node <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p,<span style="color: #0000ff;">int</span> v<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>p<span style="color: #008000;">&#41;</span>
		p<span style="color: #000080;">=</span>new_treap_node<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>size<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>v <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			treap_insert<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left,v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix<span style="color: #008000;">&#41;</span>
				treap_rotate_right<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>v <span style="color: #000080;">&gt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			treap_insert<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right,v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix<span style="color: #008000;">&#41;</span>
				treap_rotate_left<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
			p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> treap_delete<span style="color: #008000;">&#40;</span>treap_node <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span> <span style="color: #666666;">//real deletion</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left <span style="color: #000040;">&amp;&amp;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			treap_rotate_right<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			treap_delete<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
		<span style="color: #008000;">&#123;</span>
			treap_rotate_left<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			treap_delete<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008000;">&#41;</span>
			p<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			p<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> treap_delete<span style="color: #008000;">&#40;</span>treap_node <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p,<span style="color: #0000ff;">int</span> v<span style="color: #008000;">&#41;</span> <span style="color: #666666;">//lazy deletion</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>v<span style="color: #000080;">==</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
		p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>size<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			treap_delete<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>v <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#41;</span>
			treap_delete<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left,v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			treap_delete<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right,v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>size<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> treap_succ<span style="color: #008000;">&#40;</span>treap_node <span style="color: #000040;">*</span>p,<span style="color: #0000ff;">int</span> v,<span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>rs<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>p<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v <span style="color: #000080;">&gt;=</span> v<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		rs<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008080;">;</span>
		treap_succ<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left,v,rs<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
		treap_succ<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right,v,rs<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> treap_getmin<span style="color: #008000;">&#40;</span>treap_node <span style="color: #000040;">*</span>p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008000;">&#41;</span>
		p<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> treap_getmax<span style="color: #008000;">&#40;</span>treap_node <span style="color: #000040;">*</span>p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008000;">&#41;</span>
		p<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> treap_rank<span style="color: #008000;">&#40;</span>treap_node <span style="color: #000040;">*</span>p,<span style="color: #0000ff;">int</span> v,<span style="color: #0000ff;">int</span> cur,<span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>rank<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>v <span style="color: #000080;">==</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#41;</span>
		rank<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>lsize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> cur <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>v <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#41;</span>
		treap_rank<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left,v,cur,rank<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		treap_rank<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right,v,p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>lsize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> cur <span style="color: #000040;">+</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight,rank<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> sgt_node<span style="color: #000040;">*</span> new_sgt_node<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	SS<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>SC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">treap</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	SS<span style="color: #008000;">&#91;</span>SC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">a</span><span style="color: #000080;">=</span>SS<span style="color: #008000;">&#91;</span>SC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">b</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	SS<span style="color: #008000;">&#91;</span>SC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">left</span><span style="color: #000080;">=</span>SS<span style="color: #008000;">&#91;</span>SC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">right</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #000040;">&amp;</span>SS<span style="color: #008000;">&#91;</span>SC<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> sgt_build<span style="color: #008000;">&#40;</span>sgt_node <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p,<span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	p<span style="color: #000080;">=</span>new_sgt_node<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000080;">==</span>b<span style="color: #008000;">&#41;</span>
		p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> m<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>a<span style="color: #000040;">+</span>b<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;&gt;</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		sgt_build<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left,a,m<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		sgt_build<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right,m<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a<span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #000080;">=</span>b<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> sgt_edit<span style="color: #008000;">&#40;</span>sgt_node <span style="color: #000040;">*</span>p,<span style="color: #0000ff;">int</span> k,<span style="color: #0000ff;">int</span> v,<span style="color: #0000ff;">bool</span> del<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> delter<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a<span style="color: #000080;">==</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>del<span style="color: #008000;">&#41;</span>
			delter<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>treap<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> m<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a<span style="color: #000040;">+</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;&gt;</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">&gt;=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a <span style="color: #000040;">&amp;&amp;</span> k<span style="color: #000080;">&lt;=</span>m<span style="color: #008000;">&#41;</span>
			delter<span style="color: #000080;">=</span>sgt_edit<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left,k,v,del<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			delter<span style="color: #000080;">=</span>sgt_edit<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right,k,v,del<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>del<span style="color: #008000;">&#41;</span>
		treap_delete<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>treap,delter<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	treap_insert<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>treap,v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> delter<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> sgt_get<span style="color: #008000;">&#40;</span>sgt_node <span style="color: #000040;">*</span>p,<span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a<span style="color: #000080;">==</span>a <span style="color: #000040;">&amp;&amp;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #000080;">==</span>b<span style="color: #008000;">&#41;</span>
		T<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Tcnt<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>treap<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> m<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a<span style="color: #000040;">+</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;&gt;</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>b<span style="color: #000080;">&lt;=</span>m<span style="color: #008000;">&#41;</span>
			sgt_get<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left,a,b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000080;">&gt;=</span>m<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
			sgt_get<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right,a,b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
		<span style="color: #008000;">&#123;</span>
			sgt_get<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left,a,m<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			sgt_get<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right,m<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,v<span style="color: #008080;">;</span>
	TC<span style="color: #000080;">=</span>SC<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	sgt_root<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	sgt_build<span style="color: #008000;">&#40;</span>sgt_root,<span style="color: #0000dd;">1</span>,N<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		sgt_edit<span style="color: #008000;">&#40;</span>sgt_root,i,v,<span style="color: #0000ff;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//non-deletion</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> check<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> result,<span style="color: #0000ff;">int</span> k<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> totalrankL,totalrankR,minsucc<span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> i,rank,succ,totalrank<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,totalcount<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>Tcnt<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		succ<span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
		treap_succ<span style="color: #008000;">&#40;</span>T<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>,result,succ<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>succ<span style="color: #000080;">==</span>INF<span style="color: #008000;">&#41;</span>
			rank<span style="color: #000080;">=</span>T<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>size<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			treap_rank<span style="color: #008000;">&#40;</span>T<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>,succ,<span style="color: #0000dd;">0</span>,rank<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		totalrank<span style="color: #000040;">+</span><span style="color: #000080;">=</span>rank<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>succ <span style="color: #000080;">&lt;</span> minsucc<span style="color: #008000;">&#41;</span>
			minsucc<span style="color: #000080;">=</span>succ<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>Tcnt<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		totalcount<span style="color: #000040;">+</span><span style="color: #000080;">=</span>treap_find<span style="color: #008000;">&#40;</span>T<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>,minsucc<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	totalrankL<span style="color: #000080;">=</span><span style="color: #000040;">++</span>totalrank<span style="color: #008080;">;</span>
	totalrankR<span style="color: #000080;">=</span>totalrank<span style="color: #000040;">+</span>totalcount<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">&gt;=</span>totalrankL <span style="color: #000040;">&amp;&amp;</span> k<span style="color: #000080;">&lt;=</span>totalrankR<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%dn&quot;</span>,minsucc<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>totalrankL <span style="color: #000080;">&gt;</span> k<span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		<span style="color: #0000ff;">return</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> binary<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b,<span style="color: #0000ff;">int</span> k<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> Min<span style="color: #000080;">=</span>INF,Max<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,i,m,r<span style="color: #008080;">;</span>
	Tcnt<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	sgt_get<span style="color: #008000;">&#40;</span>sgt_root,a,b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>Tcnt<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		m<span style="color: #000080;">=</span>treap_getmax<span style="color: #008000;">&#40;</span>T<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>m<span style="color: #000080;">&gt;</span>Max<span style="color: #008000;">&#41;</span>
			Max<span style="color: #000080;">=</span>m<span style="color: #008080;">;</span>
		m<span style="color: #000080;">=</span>treap_getmin<span style="color: #008000;">&#40;</span>T<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>m<span style="color: #000080;">&lt;</span>Min<span style="color: #008000;">&#41;</span>
			Min<span style="color: #000080;">=</span>m<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	m<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>Max<span style="color: #000040;">+</span>Min<span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;&gt;</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">do</span>
	<span style="color: #008000;">&#123;</span>
		r<span style="color: #000080;">=</span>check<span style="color: #008000;">&#40;</span>m,k<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//-1=smaller 1=bigger</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>r<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			Min<span style="color: #000080;">=</span>m<span style="color: #008080;">;</span>
			m<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>m<span style="color: #000040;">+</span>Max<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;&gt;</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>r<span style="color: #000080;">&gt;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			Max<span style="color: #000080;">=</span>m<span style="color: #008080;">;</span>
			m<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>Min<span style="color: #000040;">+</span>m<span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;&gt;</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span><span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>r<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> request<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,a,b,c,j<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">do</span> c<span style="color: #000080;">=</span><span style="color: #0000dd;">getchar</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>c<span style="color: #000080;">==</span><span style="color: #0000dd;">10</span> <span style="color: #000040;">||</span>c<span style="color: #000080;">==</span><span style="color: #0000dd;">13</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>c<span style="color: #000080;">==</span><span style="color: #FF0000;">'C'</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>a,<span style="color: #000040;">&amp;</span>b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			sgt_edit<span style="color: #008000;">&#40;</span>sgt_root,a,b,<span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>a,<span style="color: #000040;">&amp;</span>b,<span style="color: #000040;">&amp;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			binary<span style="color: #008000;">&#40;</span>a,b,c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;dynrank.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;dynrank.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>D<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>D<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		request<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>我的转述</p>
<blockquote><p>动态排名系统</p>
<p>[问题描述]<br />
给定一个长度为N的已知序列A[i](1&lt;=i&lt;=N)，要求维护这个序列，能够支持以下两种操作：<br />
1、查询A[i],A[i+1],A[i+2],&#8230;,A[j](1&lt;=i&lt;=j&lt;=N)中，升序排列后排名第k的数。<br />
2、修改A[i]的值为j。</p>
<p>所谓排名第k，指一些数按照升序排列后，第k位的数。例如序列{6,1,9,6,6}，排名第3的数是6，排名第5的数是9。</p>
<p>[输入格式]<br />
第一行包含一个整数D(0&lt;=D&lt;=4)，表示测试数据的数目。接下来有D组测试数据，每组测试数据中，首先是两个整数N(1&lt;=N&lt;=50000),M(1&lt;=M&lt;=10000)，表示序列的长度为N，有M个操作。接下来的N个不大于1,000,000,000正整数，第i个表示序列A[i]的初始值。然后的M行，每行为一个操作<br />
Q i j k 或者<br />
C i j<br />
分别表示查询A[i],A[i+1],A[i+2],&#8230;,A[j](1&lt;=i&lt;=j&lt;=N)中，升序排列后排名第k的数，和修改A[i]的值为j。</p>
<p>[输出格式]<br />
对于每个查询，输出一行整数，为查询的结果。测试数据之间不应有空行。</p>
<p>[样例输入]<br />
2<br />
5 3<br />
3 2 1 4 7<br />
Q 1 4 3<br />
C 2 6<br />
Q 2 5 3<br />
5 3<br />
3 2 1 4 7<br />
Q 1 4 3<br />
C 2 6<br />
Q 2 5 3</p>
<p>[样例输出]<br />
3<br />
6<br />
3<br />
6</p></blockquote>
<p>题目原貌</p>
<blockquote>
<p style="margin-bottom: 0cm; widows: 2; orphans: 2;" align="center"><span style="color: #0000ff;"><span style="font-family: 宋体,SimSun;"><span style="font-size: large;">Dynamic Rankings</span></span></span></p>
<p style="margin-bottom: 0cm; widows: 2; orphans: 2;" align="left">
<p style="margin-bottom: 0cm; widows: 2; orphans: 2;" align="center"><span style="font-family: Times New Roman,serif;"><span style="color: #008000;"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;">Time limit:</span></span></span><span style="font-family: 宋体,SimSun;"><span style="font-size: small;"> 10 Seconds </span></span><span style="color: #008000;"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;">Memory limit: </span></span></span><span style="font-family: 宋体,SimSun;"><span style="font-size: small;">65536K</span></span></span></p>
<p style="margin-bottom: 0cm; widows: 2; orphans: 2;" align="center">
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;">The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with the query like to simply find the k-th smallest number of the given N numbers. They have developed a more powerful system such that for N numbers a[1], a[2], &#8230;, a[N], you can ask it like : what is the k-th smallest number of a[i], a[i+1], &#8230;, a[j]? (For some i&lt;=j, 0&lt;k&lt;=j+1-i that you have given to it). More powerful, you can even change the value of some a[i], and continue to query, all the same.</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;">Your task is to write a program for this computer, which</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;">- Reads N numbers from the input (1&lt;=N&lt;=50,000)</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;">- Processes M instructions of the input (1&lt;=M&lt;=10,000). These instructions include querying the k-th smallest number of a[i], a[i+1], &#8230;, a[j] and change some a[i] to t.</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;"><strong>Input</strong></span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: Times New Roman,serif;"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;">The first line of the input is a single number X (0&lt;X&lt;=4), the number of the test cases of the input. Then X blocks each represent a single test case.</span></span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: Times New Roman,serif;"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;">The first line of each block contains two integers N and M, representing N numbers and M instruction. It is followed by N lines. The (i+1)-th line represents the number a[i]. Then M lines that is in the following format</span></span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: Times New Roman,serif;"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;">Q i j k           or<br />
C i t</span></span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: Times New Roman,serif;"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;">It represents to query the k-th number of a[i], a[i+1],&#8230;, a[j] and change some a[i] to t, respectively. It is guaranteed that at any time of the operation. Any number a[i] is a non-negative integer that is less than 1,000,000,000.</span></span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;">There&#8217;re NO breakline between two continuous test cases.</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;"><strong>Output</strong></span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;">For each querying operation, output one integer to represent the result. (i.e. the k-th smallest number of a[i], a[i+1],&#8230;, a[j])</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;"><strong>There&#8217;re NO breakline between two continuous test cases.</strong></span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;"><strong>Sample Input</strong></span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: Times New Roman,serif;"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;">2<br />
5 3<br />
3 2 1 4 7<br />
Q 1 4 3<br />
C 2 6<br />
Q 2 5 3<br />
5 3<br />
3 2 1 4 7<br />
Q 1 4 3<br />
C 2 6<br />
Q 2 5 3</span></span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;"><strong>Sample Output</strong></span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: Times New Roman,serif;"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;">3<br />
6<br />
3<br />
6</span></span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: Times New Roman,serif;"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;"><strong>Author:</strong></span></span><span style="font-family: 宋体,SimSun;"><span style="font-size: small;"> XIN, Tao (chief editor), ZHU, Zeyuan (subeditor), PAN, Zhenhao (adviser)</span></span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; widows: 2; orphans: 2;" align="left"><span style="font-family: Times New Roman,serif;"><span style="font-family: 宋体,SimSun;"><span style="font-size: small;"><strong>Site: </strong></span></span><span style="font-family: 宋体,SimSun;"><span style="font-size: small;">http://zhuzeyuan.hp.infoseek.co.jp/index.files/our_contest_20040619.htm</span></span></span></p>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/noi-2009-treapmod/" title="NOI 2009 二叉查找树">NOI 2009 二叉查找树</a></li><li><a href="http://www.byvoid.com/blog/noi-2007-necklace/" title="NOI 2007 项链工厂">NOI 2007 项链工厂</a></li><li><a href="http://www.byvoid.com/blog/noi-2001-solution/" title="NOI 2001 解题报告">NOI 2001 解题报告</a></li><li><a href="http://www.byvoid.com/blog/sgt-railway/" title="线段树 售票系统">线段树 售票系统</a></li><li><a href="http://www.byvoid.com/blog/binary-index-tree/" title="树状数组">树状数组</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-kop/" title="POI 2001 Glodmine 金矿">POI 2001 Glodmine 金矿</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/zju-2112/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
