<?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; Treap</title>
	<atom:link href="http://www.byvoid.com/blog/tag/treap/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>NOI 2009 二叉查找树</title>
		<link>http://www.byvoid.com/blog/noi-2009-treapmod/</link>
		<comments>http://www.byvoid.com/blog/noi-2009-treapmod/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 12:38:55 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[NOI]]></category>
		<category><![CDATA[NOI2009]]></category>
		<category><![CDATA[Treap]]></category>
		<category><![CDATA[二叉查找树]]></category>
		<category><![CDATA[动态规划]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=1763</guid>
		<description><![CDATA[问题简述 有一棵Treap，每个节点有一个互不相同的数据值和权值，以及一个访问频度。一个节点的访问代价为它的访问频度乘以它在树中的深度，整棵树的访问代价定义为所有节点的访问代价... ]]></description>
			<content:encoded><![CDATA[<h3><a name="_Toc241572393">问题简述</a></h3>
<p>有一棵Treap，每个节点有一个互不相同的数据值和权值，以及一个访问频度。一个节点的访问代价为它的访问频度乘以它在树中的深度，整棵树的访问代价定义为所有节点的访问代价之和。节点的权值可以修改为任意实数，每修改一个节点的权值的代价为K。任务是修改一些节点的权值，使得整棵树的访问代价与修改代价之和最小。<span id="more-1763"></span></p>
<h3><a name="_Toc241572394"></a><a name="_Toc241035976">问题建模</a></h3>
<p>首先离散化所有节点的权值，对所有节点按照数据值排序后线性存储。定义S[i,j]为(排序后)第i个节点到第j个节点的访问频度之和。</p>
<h4><a name="_Toc241572395"></a><a name="_Toc241035977">解法</a> 动态规划</h4>
<h5><a name="_Toc241572396"></a><a name="_Toc241035978">算法描述</a></h5>
<p>定义Weight[i]为状态转移方程为第i个节点离散化后的权值，F[i,j,w]表示从第i个节点到第j个节点组成一棵子树的最小代价，子树根节点的权值≥w。状态转移方程为</p>
<p><img style="display: inline; border: 0px;" title="clip_image002" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/clip_image002.gif" border="0" alt="clip_image002" width="528" height="55" /></p>
<p>边界条件为<img style="display: inline; border: 0px;" title="clip_image004" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/clip_image004.gif" border="0" alt="clip_image004" width="114" height="37" />，目标函数为<img style="display: inline; border: 0px;" title="clip_image006" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/clip_image0062.gif" border="0" alt="clip_image006" width="145" height="37" />。</p>
<h5><a name="_Toc241572397">算法分析</a></h5>
<p>对于一个状态F[i,j,w]，我们要枚举从节点[i..j]组成的这棵子树的根节点k，其左子树为[i..k-1]，右子树为[k+1..j]。</p>
<p>如果根节点k的权值Weight[k]≥w，那么节点k的权值无需修改即可直接作为该子树的根节点。总代价为左子树的代价F[i,k-1, Weight[k]]，加上右子树的代价F[k+1,j, Weight[k]]，以及整个子树的访问频度之和。</p>
<p>另外一种情况，修改节点k的权值，使之不小于w。由于我们已经离散化了权值，修改后的权值不应是整数，以免和已有重复。假设节点k修改后的权值为w加上一个很小的小数，其左右子树根节点的权值都不应小于节点k修改后的权值。我们约定如果根和子节点都必须大于w的话，则子节点的权值比根节点略大，且大于w。于是这种情况的总代价为左子树的代价F[i,k-1, w]，加上右子树的代价F[k+1,j, w]，加上修改权值的代价K，以及整个子树的访问频度之和。</p>
<h5><a name="_Toc241572398"></a><a name="_Toc241035980">复杂度分析</a></h5>
<p>状态数为O(N<sup>3</sup>)，每次转移需要以O(N)的时间枚举k，所以时间复杂度为O(N<sup>4</sup>)。在实际测试中通过了所以测试点，得到100分。</p>
<h5><a name="_Toc241572399"></a><a name="_Toc241035981">参考程序</a></h5>

<div class="wp_codebox_msgheader wp_codebox_hide"><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('p1763code2'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p17632"><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
</pre></td><td class="code" id="p1763code2"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI2009 treapmod
 * Author: Guo Jiabao
 * Time: 2009.9.24 14:50
 * State: Solved
 * Memo: 动态规划
*/</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>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">typedef</span> <span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> big<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;">72</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> big INF <span style="color: #000080;">=</span> ~0ULL<span style="color: #000080;">&gt;&gt;</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> node
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> val,wei,freq<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>P<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> N,K<span style="color: #008080;">;</span>
big sf<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,F<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,Ans<span style="color: #000080;">=</span>INF<span style="color: #008080;">;</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<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;treapmod.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;treapmod.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%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>K<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: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">val</span><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: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">wei</span><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: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">freq</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>F,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> cmp1<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>a,<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>node <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>a<span style="color: #008000;">&#41;</span> <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span> wei <span style="color: #000040;">-</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>node <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>b<span style="color: #008000;">&#41;</span> <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span> wei<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> cmp2<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>a,<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>node <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>a<span style="color: #008000;">&#41;</span> <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span> val <span style="color: #000040;">-</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>node <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>b<span style="color: #008000;">&#41;</span> <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span> val<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> big sum<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i,<span style="color: #0000ff;">int</span> j<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> sf<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> sf<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
big dp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i,<span style="color: #0000ff;">int</span> j,<span style="color: #0000ff;">int</span> w<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">&gt;</span>j<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;">if</span> <span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>w<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> a<span style="color: #008080;">;</span>
		big t,rs<span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>a<span style="color: #000080;">&lt;=</span>j<span style="color: #008080;">;</span>a<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			t <span style="color: #000080;">=</span> dp<span style="color: #008000;">&#40;</span>i,a<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,w<span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> dp<span style="color: #008000;">&#40;</span>a<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,j,w<span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> sum<span style="color: #008000;">&#40;</span>i,j<span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> K<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>t <span style="color: #000080;">&lt;</span> rs<span style="color: #008000;">&#41;</span>
				rs <span style="color: #000080;">=</span> t<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">wei</span> <span style="color: #000080;">&gt;=</span> w<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				t <span style="color: #000080;">=</span> dp<span style="color: #008000;">&#40;</span>i,a<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,P<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">wei</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> dp<span style="color: #008000;">&#40;</span>a<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,j,P<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">wei</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> sum<span style="color: #008000;">&#40;</span>i,j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>t <span style="color: #000080;">&lt;</span> rs<span style="color: #008000;">&#41;</span>
					rs <span style="color: #000080;">=</span> t<span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
		F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>w<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> rs<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>w<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> solve<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<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>P<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,N,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,cmp1<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>
		P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">wei</span> <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>P<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,N,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,cmp2<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>
		P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">val</span> <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span>
		sf<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> sf<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">freq</span><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;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		big t <span style="color: #000080;">=</span> dp<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>,N,i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>t <span style="color: #000080;">&lt;</span> Ans<span style="color: #008000;">&#41;</span>
			Ans <span style="color: #000080;">=</span> t<span style="color: #008080;">;</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>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> Ans <span style="color: #000080;">&lt;&lt;</span> endl<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></pre></td></tr></table></div>

<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/noi-2009-poet/" title="NOI 2009 诗人小G">NOI 2009 诗人小G</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/noi-2009-solution/" title="NOI 2009 解题报告">NOI 2009 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-path/" title="NOI 2009 描边">NOI 2009 描边</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-ball/" title="NOI 2009 管道取珠">NOI 2009 管道取珠</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-pvz/" title="NOI 2009 植物大战僵尸">NOI 2009 植物大战僵尸</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/noi-2009-treapmod/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>NOI 2001 解题报告</title>
		<link>http://www.byvoid.com/blog/noi-2001-solution/</link>
		<comments>http://www.byvoid.com/blog/noi-2001-solution/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 09:31:06 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[NOI]]></category>
		<category><![CDATA[2000]]></category>
		<category><![CDATA[BFS]]></category>
		<category><![CDATA[NOI2001]]></category>
		<category><![CDATA[Treap]]></category>
		<category><![CDATA[动态规划]]></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=982</guid>
		<description><![CDATA[NOI2001的题目是[反正切函数的应用][聪明的打字员][陨石的秘密][食物链][炮兵阵地][方程的解数]。 其中[反正切函数的应用][聪明的打字员]较为简单，[陨石的秘密][食物链][炮兵阵地][方程的解数]... ]]></description>
			<content:encoded><![CDATA[<p>NOI2001的题目是[反正切函数的应用][聪明的打字员][陨石的秘密][食物链][炮兵阵地][方程的解数]。</p>
<p>其中[反正切函数的应用][聪明的打字员]较为简单，[陨石的秘密][食物链][炮兵阵地][方程的解数]稍有难度。</p>
<p>[反正切函数的应用]是一个求函数最值的问题，要配合数学知识解决。[聪明的打字员]是广度优先搜索问题。[陨石的秘密]是一个树形动态规划的问题，需要仔细思考。[食物链]用到了并差集。[  炮兵阵地]是个不易看出的动态规划问题。[方程的解数]是搜索问题，需要用哈希表来优化。</p>
<p><span id="more-982"></span></p>
<p><strong>[反正切函数的应用]</strong></p>
<p>根据题中公式，可以推出 a=(b*c-1)/(b+c)。由此得出c=(a*b+1)/(b-a)。因为b,c均为正整数，所以b&gt;a。</p>
<p>我们要求b+c最小，设函数y=f(x)，自变量x为b的取值，但不限于正整数。则有</p>
<ul>
<li>f(x) = (a*x+1)/(x-a) + x = a + ((1+a^2)/(x-a)) + x</li>
</ul>
<p>对f(x)求导，得导数</p>
<ul>
<li>f&#8217;(x)=1-(1+a^2)/(x-a)^2</li>
</ul>
<p>f&#8217;(x)=0 得出 x = a+(a^2+1)^0.5 或 x = a-(a^2+1)^0.5，由于x&gt;0，取 <strong>x = a+(a^2+1)^0.5</strong>。</p>
<p>且x &gt; a+(a^2+1)^0.5时，f&#8217;(x)&gt;0，x &lt; a+(a^2+1)^0.5时，f&#8217;(x)&lt;0，所以当x = a+(a^2+1)^0.5时，f(x)取得最小值。</p>
<p>由于b和c都是正整数，只需在x一边寻找距离x最近的整数b,c，b+c即要求的最小值。</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><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('p982code9'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p9829"><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
</pre></td><td class="code" id="p982code9"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/*
 * Problem: NOI2001 arctan
 * Author: Guo Jiabao
 * Time: 2009.3.21 14:18
 * State: Solved
 * Memo: 函数最值问题
*/</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>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> a,b,c,Ans<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008080;">;</span>
<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;arctan.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;arctan.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>a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">double</span> t<span style="color: #000080;">=</span><span style="color: #0000dd;">ceil</span><span style="color: #008000;">&#40;</span>a<span style="color: #000040;">+</span><span style="color: #0000dd;">sqrt</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span><span style="color: #008000;">&#41;</span>a<span style="color: #000040;">*</span>a<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><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: #008080;">;;</span>t<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		b<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#40;</span>t<span style="color: #000040;">+</span><span style="color:#800080;">0.1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> q<span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>
		q<span style="color: #000080;">=</span>q<span style="color: #000040;">*</span>b<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>q<span style="color: #000040;">%</span><span style="color: #008000;">&#40;</span>b<span style="color: #000040;">-</span>a<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			c<span style="color: #000080;">=</span>q<span style="color: #000040;">/</span><span style="color: #008000;">&#40;</span>b<span style="color: #000040;">-</span>a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			Ans<span style="color: #000080;">=</span>b<span style="color: #000040;">+</span>c<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,Ans<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></pre></td></tr></table></div>

<p><strong>[聪明的打字员]</strong></p>
<p>简单的广搜题，对于每个状态，直接按照规则扩展6状态，开一个哈希表判重，直到搜索到结果为止。</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><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('p982code10'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p98210"><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
</pre></td><td class="code" id="p982code10"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/*
 * Problem: NOI2001 clever
 * Author: Guo Jiabao
 * Time: 2009.3.17 13:37
 * State: Solved
 * Memo: BFS
*/</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>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> LIM<span style="color: #000080;">=</span><span style="color: #0000dd;">1000000</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> state
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> s,step,pos<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> used<span style="color: #008000;">&#91;</span>LIM<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">7</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> S,T<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> Q_size,Q_head,Q_tail<span style="color: #008080;">;</span>
state Q<span style="color: #008000;">&#91;</span>LIM<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
state start<span style="color: #008080;">;</span>
<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: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;clever.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;clever.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%d&quot;</span>,<span style="color: #000040;">&amp;</span>S,<span style="color: #000040;">&amp;</span>T<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	start.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>S<span style="color: #008080;">;</span>
	start.<span style="color: #007788;">pos</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	start.<span style="color: #007788;">step</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	Q_head<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>Q_tail<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>Q_size<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> Answer<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> ans<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;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">exit</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> Q_ins<span style="color: #008000;">&#40;</span>state p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>used<span style="color: #008000;">&#91;</span>p.<span style="color: #007788;">s</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p.<span style="color: #007788;">pos</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
	used<span style="color: #008000;">&#91;</span>p.<span style="color: #007788;">s</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p.<span style="color: #007788;">pos</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">s</span><span style="color: #000080;">==</span>T<span style="color: #008000;">&#41;</span> Answer<span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">step</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Q_size<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">++</span>Q_head<span style="color: #000080;">==</span>LIM<span style="color: #008000;">&#41;</span> Q_head<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	Q<span style="color: #008000;">&#91;</span>Q_head<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
state Q_pop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	state r<span style="color: #000080;">=</span>Q<span style="color: #008000;">&#91;</span>Q_tail<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	Q_size<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">++</span>Q_tail<span style="color: #000080;">==</span>LIM<span style="color: #008000;">&#41;</span> Q_tail<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> r<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> BFS<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	state u,v<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> pos<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">7</span><span style="color: #008000;">&#93;</span>,su,sv,tim,p,i<span style="color: #008080;">;</span>
	Q_ins<span style="color: #008000;">&#40;</span>start<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Q_size<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		u<span style="color: #000080;">=</span>Q_pop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		su<span style="color: #000080;">=</span>sv<span style="color: #000080;">=</span>u.<span style="color: #007788;">s</span><span style="color: #008080;">;</span>
		p<span style="color: #000080;">=</span>u.<span style="color: #007788;">pos</span><span style="color: #008080;">;</span>
		tim<span style="color: #000080;">=</span>LIM<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>p<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			tim<span style="color: #000040;">/</span><span style="color: #000080;">=</span><span style="color: #0000dd;">10</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;">6</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			pos<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>sv<span style="color: #000040;">%</span><span style="color:#800080;">10</span><span style="color: #008080;">;</span>
			sv<span style="color: #000040;">/</span><span style="color: #000080;">=</span><span style="color: #0000dd;">10</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">&gt;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//swap0</span>
		<span style="color: #008000;">&#123;</span>
			sv<span style="color: #000080;">=</span>su<span style="color: #008080;">;</span>
			sv<span style="color: #000040;">-</span><span style="color: #000080;">=</span><span style="color: #0000dd;">100000</span><span style="color: #000040;">*</span>pos<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> tim<span style="color: #000040;">*</span>pos<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			sv<span style="color: #000040;">+</span><span style="color: #000080;">=</span>tim<span style="color: #000040;">*</span>pos<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">100000</span><span style="color: #000040;">*</span>pos<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">pos</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">pos</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">step</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">step</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>sv<span style="color: #008080;">;</span>
			Q_ins<span style="color: #008000;">&#40;</span>v<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>p<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">6</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//swap1</span>
		<span style="color: #008000;">&#123;</span>
			sv<span style="color: #000080;">=</span>su<span style="color: #008080;">;</span>
			sv<span style="color: #000040;">-</span><span style="color: #000080;">=</span>pos<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">6</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> tim<span style="color: #000040;">*</span>pos<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			sv<span style="color: #000040;">+</span><span style="color: #000080;">=</span>tim<span style="color: #000040;">*</span>pos<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">6</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> pos<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">pos</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">pos</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">step</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">step</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>sv<span style="color: #008080;">;</span>
			Q_ins<span style="color: #008000;">&#40;</span>v<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>pos<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000dd;">9</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//up</span>
		<span style="color: #008000;">&#123;</span>
			sv<span style="color: #000080;">=</span>su<span style="color: #008080;">;</span>
			sv<span style="color: #000040;">+</span><span style="color: #000080;">=</span>tim<span style="color: #008080;">;</span>
			v.<span style="color: #007788;">pos</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">pos</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">step</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">step</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>sv<span style="color: #008080;">;</span>
			Q_ins<span style="color: #008000;">&#40;</span>v<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>pos<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><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: #666666;">//down</span>
		<span style="color: #008000;">&#123;</span>
			sv<span style="color: #000080;">=</span>su<span style="color: #008080;">;</span>
			sv<span style="color: #000040;">-</span><span style="color: #000080;">=</span>tim<span style="color: #008080;">;</span>
			v.<span style="color: #007788;">pos</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">pos</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">step</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">step</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>sv<span style="color: #008080;">;</span>
			Q_ins<span style="color: #008000;">&#40;</span>v<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>p<span style="color: #000080;">&gt;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//left</span>
		<span style="color: #008000;">&#123;</span>
			v.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">s</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">pos</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">pos</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">step</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">step</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			Q_ins<span style="color: #008000;">&#40;</span>v<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>p<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">6</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//right</span>
		<span style="color: #008000;">&#123;</span>
			v.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">s</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">pos</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">pos</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">step</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">step</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			Q_ins<span style="color: #008000;">&#40;</span>v<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>
<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>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	BFS<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: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p><strong>[陨石的秘密]</strong></p>
<p>容易看出是动态规划，但是状态转移方程容易考虑不周全。</p>
<p>题目中样例的8种方案为</p>
<pre>{[]()} {()[]} {}[()] [()]{} []{()} {()}[] (){[]} {[]}()</pre>
<p>可以看出每个SS表达式都可以看成由几个小的SS组成，组成方式可能是嵌套或者连接。如果是嵌套（包括仅1层），我们把这个嵌套体看作一个整体部分，称为一个组。则每个SS表达式都是由几个组连接而成了。</p>
<p>设定 F[p1,p2,p3,d]为深度<strong>不超过</strong>d，包含p1个{}，p2个[],p3个()的SS表达式的可能组成的方案数。S[p1,p2,p3,d]为深度不超过d，包含p1个{}，p2个[],p3个()的<strong>一个组</strong>的可能组成的方案数。</p>
<p>则状态转移方程为</p>
<pre>S[p1,p2,p3,d]=
{
	0 (p1==p2==p3==0)
	F[p1-1,p2,p3,d-1] (p1&gt;=1)
	F[p1,p2-1,p3,d-1] (p1==0 &amp;&amp; p2&gt;=1)
	F[p1,p2,p3-1,d-1] (p1==0 &amp;&amp; p2==0 &amp;&amp; p3&gt;=1)
}</pre>
<p>F[p1,p2,p3,d]=Σ(S[x1,x2,x3,d]*F[p1-x1,p2-x2,p3-x3,d]) (0&lt;=x1&lt;=p1,0&lt;=x2&lt;=p2,0&lt;=x3&lt;=p3且x1,x2,x3不同时为0)</p>
<p>初始条件</p>
<ul>
<li>F[0,0,0,i]=1 (0&lt;=i&lt;=D)</li>
</ul>
<p>最终的结果就是</p>
<ul>
<li>F[L1,L2,L3,D]-F[L1,L2,L3,D-1]</li>
</ul>

<div class="wp_codebox_msgheader wp_codebox_hide"><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('p982code11'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p98211"><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
</pre></td><td class="code" id="p982code11"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI2001 secret
 * Author: Guo Jiabao
 * Time: 2009.3.18 13:54
 * State: Solved
 * Memo: 动态规划
*/</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>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXL<span style="color: #000080;">=</span><span style="color: #0000dd;">11</span>,MAXD<span style="color: #000080;">=</span><span style="color: #0000dd;">31</span>,MOD<span style="color: #000080;">=</span><span style="color: #0000dd;">11380</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> L1,L2,L3,D,Ans<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> F<span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXD<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> single<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p1,<span style="color: #0000ff;">int</span> p2,<span style="color: #0000ff;">int</span> p3,<span style="color: #0000ff;">int</span> d<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> dp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p1,<span style="color: #0000ff;">int</span> p2,<span style="color: #0000ff;">int</span> p3,<span style="color: #0000ff;">int</span> d<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<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: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;secret.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;secret.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%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>L1,<span style="color: #000040;">&amp;</span>L2,<span style="color: #000040;">&amp;</span>L3,<span style="color: #000040;">&amp;</span>D<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> p1,p2,p3,d<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>d<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>d<span style="color: #000080;">&lt;=</span>D<span style="color: #008080;">;</span>d<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>p1<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>p1<span style="color: #000080;">&lt;=</span>L1<span style="color: #008080;">;</span>p1<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>p2<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>p2<span style="color: #000080;">&lt;=</span>L2<span style="color: #008080;">;</span>p2<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>p3<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>p3<span style="color: #000080;">&lt;=</span>L3<span style="color: #008080;">;</span>p3<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
					F<span style="color: #008000;">&#91;</span>p1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p3<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>d<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		F<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>d<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</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;">int</span> single<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p1,<span style="color: #0000ff;">int</span> p2,<span style="color: #0000ff;">int</span> p3,<span style="color: #0000ff;">int</span> d<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p1<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> dp<span style="color: #008000;">&#40;</span>p1<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,p2,p3,d<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><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>p1<span style="color: #000080;">==</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> p2<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> dp<span style="color: #008000;">&#40;</span>p1,p2<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,p3,d<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		<span style="color: #0000ff;">return</span> dp<span style="color: #008000;">&#40;</span>p1,p2,p3<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,d<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> dp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p1,<span style="color: #0000ff;">int</span> p2,<span style="color: #0000ff;">int</span> p3,<span style="color: #0000ff;">int</span> d<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>d<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">0</span><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;">if</span> <span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>p1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p3<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>d<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> x1,x2,x3,y1,y2,y3<span style="color: #008080;">;</span>
		F<span style="color: #008000;">&#91;</span>p1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p3<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>d<span style="color: #008000;">&#93;</span><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>x1<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>x1<span style="color: #000080;">&lt;=</span>p1<span style="color: #008080;">;</span>x1<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>x2<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>x2<span style="color: #000080;">&lt;=</span>p2<span style="color: #008080;">;</span>x2<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>x3<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>x3<span style="color: #000080;">&lt;=</span>p3<span style="color: #008080;">;</span>x3<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					y1<span style="color: #000080;">=</span>p1<span style="color: #000040;">-</span>x1<span style="color: #008080;">;</span>y2<span style="color: #000080;">=</span>p2<span style="color: #000040;">-</span>x2<span style="color: #008080;">;</span>y3<span style="color: #000080;">=</span>p3<span style="color: #000040;">-</span>x3<span style="color: #008080;">;</span>
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>x1<span style="color: #000040;">+</span>x2<span style="color: #000040;">+</span>x3<span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span>
					F<span style="color: #008000;">&#91;</span>p1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p3<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>d<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span>single<span style="color: #008000;">&#40;</span>x1,x2,x3,d<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>dp<span style="color: #008000;">&#40;</span>y1,y2,y3,d<span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span>MOD<span style="color: #008080;">;</span>
					F<span style="color: #008000;">&#91;</span>p1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p3<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>d<span style="color: #008000;">&#93;</span><span style="color: #000040;">%</span><span style="color: #000080;">=</span>MOD<span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> F<span style="color: #008000;">&#91;</span>p1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p3<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>d<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<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>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Ans<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>dp<span style="color: #008000;">&#40;</span>L1,L2,L3,D<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>dp<span style="color: #008000;">&#40;</span>L1,L2,L3,D<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span>MOD<span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span>MOD<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,Ans<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></pre></td></tr></table></div>

<p><strong>[食物链]</strong></p>
<p>这道题真是个并差集的典型应用问题。由于判断真假总是根据前面得到的关系，在某时关系不是完全的，所以不能直接判断a,b究竟是哪个物种，但是可以知道部分的关系。</p>
<p>很显然，合法的关系都是三角形环，如果a,b同属于一个环内，那么它们的关系是可以直接判断的。如果不属于同一环，因为不与前面矛盾，就认 为是正确的，然后把a,b所在的两个环合并。建立一个并差集，表示每个生物所属的物种类型。对于物种i，定义prev[i]为可以吃掉i的物种类 型，next[i]为i可以吃掉的物种类型。初始时，每个物种i对应一个单独的类型，并且引入两个虚节点prev[i]和next[i]，可分别为一个单 独的类型。</p>
<p>合并两个环时，对于D=1，a与b为同一物种，分别把(a,b),(prev[a],prev[b]),(next[a],next[b])依次合并。</p>
<p>对于D=2，a可以吃掉b，则分别把(next[a],b),(a,prev[b]),(prev[a],next[b])依次合并。</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><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('p982code12'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p98212"><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
</pre></td><td class="code" id="p982code12"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI2001
 * Author: Guo Jiabao
 * Time: 2009.3.13 13:28
 * State: Solved
 * Memo: 并差集 等价类判断
*/</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>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">50001</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> UFS
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> f<span style="color: #008000;">&#91;</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> getroot<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> t,r<span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>f<span style="color: #008000;">&#91;</span>r<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>r<span style="color: #008000;">&#41;</span> r<span style="color: #000080;">=</span>f<span style="color: #008000;">&#91;</span>r<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>f<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>a<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>t<span style="color: #000080;">=</span>f<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>f<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>r<span style="color: #008080;">;</span>a<span style="color: #000080;">=</span>t<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">return</span> r<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">bool</span> judge<span style="color: #008000;">&#40;</span><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;">return</span> getroot<span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span>getroot<span style="color: #008000;">&#40;</span>b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">void</span> merge<span style="color: #008000;">&#40;</span><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>f<span style="color: #008000;">&#91;</span>getroot<span style="color: #008000;">&#40;</span>b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>getroot<span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>U<span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,M,Fake<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> prev<span style="color: #008000;">&#91;</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span>,next<span style="color: #008000;">&#91;</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<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,p,n<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;eat.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;eat.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%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>
	<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>
		p<span style="color: #000080;">=</span>N<span style="color: #000040;">+</span>i<span style="color: #008080;">;</span>n<span style="color: #000080;">=</span>p<span style="color: #000040;">+</span>N<span style="color: #008080;">;</span>
		U.<span style="color: #007788;">f</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>U.<span style="color: #007788;">f</span><span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>U.<span style="color: #007788;">f</span><span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>n<span style="color: #008080;">;</span>
		prev<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>next<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>n<span style="color: #008080;">;</span>prev<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
		next<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>prev<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>n<span style="color: #008080;">;</span>next<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">bool</span> relation<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> d,<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>d<span style="color: #000080;">==</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>U.<span style="color: #007788;">judge</span><span style="color: #008000;">&#40;</span>a,b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>U.<span style="color: #007788;">judge</span><span style="color: #008000;">&#40;</span>prev<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,b<span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span> U.<span style="color: #007788;">judge</span><span style="color: #008000;">&#40;</span>next<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
		U.<span style="color: #007788;">merge</span><span style="color: #008000;">&#40;</span>a,b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		U.<span style="color: #007788;">merge</span><span style="color: #008000;">&#40;</span>prev<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,prev<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		U.<span style="color: #007788;">merge</span><span style="color: #008000;">&#40;</span>next<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,next<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</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: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>U.<span style="color: #007788;">judge</span><span style="color: #008000;">&#40;</span>next<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>U.<span style="color: #007788;">judge</span><span style="color: #008000;">&#40;</span>a,b<span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span> U.<span style="color: #007788;">judge</span><span style="color: #008000;">&#40;</span>prev<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
		U.<span style="color: #007788;">merge</span><span style="color: #008000;">&#40;</span>next<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		U.<span style="color: #007788;">merge</span><span style="color: #008000;">&#40;</span>a,prev<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		U.<span style="color: #007788;">merge</span><span style="color: #008000;">&#40;</span>prev<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,next<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</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: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> solve<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,d,a,b<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: #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>d,<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>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000080;">&gt;</span>N <span style="color: #000040;">||</span> b<span style="color: #000080;">&gt;</span>N <span style="color: #000040;">||</span> <span style="color: #008000;">&#40;</span>d<span style="color: #000080;">==</span><span style="color: #0000dd;">2</span> <span style="color: #000040;">&amp;&amp;</span> a<span style="color: #000080;">==</span>b<span style="color: #008000;">&#41;</span> <span style="color: #000040;">||!</span>relation<span style="color: #008000;">&#40;</span>d,a,b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			Fake<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<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>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,Fake<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></pre></td></tr></table></div>

<p><strong>[炮兵阵地]</strong></p>
<p>较难看出的动态规划问题。注意到数据范围N≤100；M≤10，发现每行的宽度都不大，所以可以考虑把一行看成一个状态，表示该行的布置方案。每行的布置方案可以预先处理出，由数学知识可以算出，每行最多的布置方案数也不过60个而已。</p>
<p>状态设定</p>
<p>F[i,a,b]为前i行，第i行的方案为A[a]，第i-1行的方案为A[b]的最大炮兵数。</p>
<p>状态转移方程</p>
<ul>
<li>F[i,a,b]=Max{ F[i-1,b,c] + P[a] }</li>
</ul>
<p>其中c为i-2行的布置方案，a,b,c应保证互不冲突，即放置方案中炮兵都在平地上，且不会互相攻击到。</p>
<p>目标结果</p>
<ul>
<li>Ans=Max{F[N,a,b]}</li>
</ul>

<div class="wp_codebox_msgheader wp_codebox_hide"><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('p982code13'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p98213"><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
</pre></td><td class="code" id="p982code13"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI2001 cannon
 * Author: Guo Jiabao
 * Time: 2009.3.20 17:54
 * State: Solved
 * Memo: 动态规划 位表示状态
*/</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>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">101</span>,MAXM<span style="color: #000080;">=</span><span style="color: #0000dd;">11</span>,MAXA<span style="color: #000080;">=</span><span style="color: #0000dd;">61</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,M,Ans,AC<span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> used<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> F<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXA<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXA<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> A<span style="color: #008000;">&#91;</span>MAXA<span style="color: #008000;">&#93;</span>,C<span style="color: #008000;">&#91;</span>MAXA<span style="color: #008000;">&#93;</span>,Pla<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<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,j<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">char</span> c<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;cannon.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;cannon.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%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>
	<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: #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: #0000dd;">ungetc</span><span style="color: #008000;">&#40;</span>c,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		Pla<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><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>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</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: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #FF0000;">'H'</span><span style="color: #008000;">&#41;</span>
				Pla<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;&lt;</span><span style="color: #008000;">&#40;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><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;">inline</span> <span style="color: #0000ff;">int</span> Max<span style="color: #008000;">&#40;</span><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;">return</span> a<span style="color: #000080;">&gt;</span>b<span style="color: #008080;">?</span>a<span style="color: #008080;">:</span>b<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> dynamic<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,j,k,l,x,y,z,p,q<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;">2</span>,j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>AC<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		x<span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		p<span style="color: #000080;">=</span>C<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>x<span style="color: #000040;">&amp;</span>Pla<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;=</span>AC<span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			y<span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			q<span style="color: #000080;">=</span>C<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>y<span style="color: #000040;">&amp;</span>Pla<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span>x<span style="color: #000040;">&amp;</span>y<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #000040;">+</span>q<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> Ans<span style="color: #008000;">&#41;</span>
				Ans <span style="color: #000080;">=</span> F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</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;">3</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: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>AC<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			x<span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>	p<span style="color: #000080;">=</span>C<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>x<span style="color: #000040;">&amp;</span>Pla<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;=</span>AC<span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					y<span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>y<span style="color: #000040;">&amp;</span>Pla<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span>x<span style="color: #000040;">&amp;</span>y<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
						<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>l<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>l<span style="color: #000080;">&lt;=</span>AC<span style="color: #008080;">;</span>l<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
						<span style="color: #008000;">&#123;</span>
							z<span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>l<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
							<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>z<span style="color: #000040;">&amp;</span>Pla<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>y<span style="color: #000040;">|</span>z<span style="color: #008000;">&#41;</span><span style="color: #000040;">&amp;</span>x<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
								F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Max<span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>,F<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>l<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> p<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>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> Ans<span style="color: #008000;">&#41;</span>
						Ans <span style="color: #000080;">=</span> F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> arrange<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p<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: #000080;">&gt;</span>M<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> r<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,c<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><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>M<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>used<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				c<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
				r<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;&lt;</span><span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		AC<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		A<span style="color: #008000;">&#91;</span>AC<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>r<span style="color: #008080;">;</span>
		C<span style="color: #008000;">&#91;</span>AC<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>c<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	used<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	arrange<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">+</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	used<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	arrange<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	arrange<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	dynamic<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;">int</span> main<span style="color: #008000;">&#40;</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>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,Ans<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></pre></td></tr></table></div>

<p><strong>[方程的解数]</strong></p>
<p>经典的搜索问题，方法是搜索每个x的所有可能值[1,M]，判断符合条件的解的个数。但是对于N=6，搜索量高达11390625000000，显然会超时。</p>
<p>我们不妨把等式变形，对于N项，把后N/2项移到等式右边，则移过去的项的k值全部取相反数。对于左边剩下的N/2项，搜索x的所有可能 值，计算左边式子的值，并插入到哈希表中。然后再对于右边的N-2项，搜索x的所有可能值，计算左边式子的值，然后再哈希表中查找与之相等的值的个数，加 到结果上。</p>
<p>插入到哈希表时先把绝对值Mod一个大质数，我选的是4000037，然后挂链解决冲突。为了提高效率，在哈希表的每个位置上我都建立了一个Treap，这样解决冲突时就能更快得找到了。</p>
<p>做这道题起初我试图直接用一个Treap存储所有的算式可能值，但是这样做会超时。通过使用哈希表，使数据平均分布了许多。哈希表和平衡树，或者Trie树混合使用不失为一种解决冲突优秀的方法。</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><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('p982code14'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p98214"><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
</pre></td><td class="code" id="p982code14"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI2001 equation1
 * Author: Guo Jiabao
 * Time: 2009.3.21 16:15
 * State: Solved
 * Memo: 搜索 + Hash +Treap判重
*/</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>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">7</span>,MAXM<span style="color: #000080;">=</span><span style="color: #0000dd;">151</span>,MAXP<span style="color: #000080;">=</span><span style="color: #0000dd;">7</span>,MOD<span style="color: #000080;">=</span><span style="color: #0000dd;">4000037</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">bool</span> LEFT<span style="color: #000080;">=</span><span style="color: #0000ff;">true</span>,RIGHT<span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> TTreap
<span style="color: #008000;">&#123;</span>
	<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> value,weight,fix<span style="color: #008080;">;</span>
		Treap_node<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> v<span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>value<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span>,weight<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			left<span style="color: #000080;">=</span>right<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			fix<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: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
	Treap_node <span style="color: #000040;">*</span>root<span style="color: #008080;">;</span>
	TTreap<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>root<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> 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>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> 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>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">void</span> 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> value<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><span style="color: #0000dd;">new</span> Treap_node<span style="color: #008000;">&#40;</span>value<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>value <span style="color: #000080;">==</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>value<span style="color: #008000;">&#41;</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: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>value <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>value<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			insert<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left,value<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>
				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: #008000;">&#123;</span>
			insert<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right,value<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>
				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: #008000;">&#125;</span>
	<span style="color: #0000ff;">int</span> find<span style="color: #008000;">&#40;</span>Treap_node <span style="color: #000040;">*</span>p,<span style="color: #0000ff;">int</span> value<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>value <span style="color: #000080;">==</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>value<span style="color: #008000;">&#41;</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: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>value <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>value<span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">return</span> find<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left,value<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			<span style="color: #0000ff;">return</span> find<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right,value<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: #008080;">;</span>
<span style="color: #0000ff;">struct</span> item
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> k,p,x<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>I<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,LIM,Mid,Ans<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> POW<span style="color: #008000;">&#91;</span>MAXM<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXP<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
TTreap Hash<span style="color: #008000;">&#91;</span>MOD<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> L<span style="color: #008080;">;</span>
<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: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;equation1.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;equation1.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%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>LIM<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Mid<span style="color: #000080;">=</span>N<span style="color: #000040;">/</span><span style="color: #0000dd;">2</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>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%d&quot;</span>,<span style="color: #000040;">&amp;</span>I<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">k</span>,<span style="color: #000040;">&amp;</span>I<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">p</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">&gt;</span>Mid<span style="color: #008000;">&#41;</span>
			I<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">k</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span>I<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">k</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">srand</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">9112</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> power<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> x,<span style="color: #0000ff;">int</span> p<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>POW<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		POW<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</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>p<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			POW<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span><span style="color: #000080;">=</span>x<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> POW<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> compute<span style="color: #008000;">&#40;</span><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;">int</span> rs<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,i<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>b<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		rs<span style="color: #000040;">+</span><span style="color: #000080;">=</span>power<span style="color: #008000;">&#40;</span>I<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span>,I<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">p</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>I<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">k</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> rs<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> Abs<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> a<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">0</span><span style="color: #008080;">?</span><span style="color: #000040;">-</span>a<span style="color: #008080;">:</span>a<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> search<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> e<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,H<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>L <span style="color: #000040;">&amp;&amp;</span> e<span style="color: #000080;">&gt;</span>Mid <span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		i<span style="color: #000080;">=</span>compute<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>,Mid<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		H<span style="color: #000080;">=</span>Abs<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span>MOD<span style="color: #008080;">;</span>
		Hash<span style="color: #008000;">&#91;</span>H<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>Hash<span style="color: #008000;">&#91;</span>H<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">root</span>,i<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><span style="color: #000040;">!</span>L <span style="color: #000040;">&amp;&amp;</span> e<span style="color: #000080;">&gt;</span>N<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		i<span style="color: #000080;">=</span>compute<span style="color: #008000;">&#40;</span>Mid<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,N<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		H<span style="color: #000080;">=</span>Abs<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span>MOD<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">int</span> a<span style="color: #000080;">=</span>Hash<span style="color: #008000;">&#91;</span>H<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">find</span><span style="color: #008000;">&#40;</span>Hash<span style="color: #008000;">&#91;</span>H<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">root</span>,i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		Ans<span style="color: #000040;">+</span><span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</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>LIM<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			I<span style="color: #008000;">&#91;</span>e<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
			search<span style="color: #008000;">&#40;</span>e<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><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;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	L<span style="color: #000080;">=</span>LEFT<span style="color: #008080;">;</span>
	search<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	L<span style="color: #000080;">=</span>RIGHT<span style="color: #008080;">;</span>
	search<span style="color: #008000;">&#40;</span>Mid<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<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>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,Ans<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></pre></td></tr></table></div>

<blockquote>
<h2><span class="mw-headline">反正切函数的应用 </span></h2>
<p><a class="image" title="Image:Arctan.gif" href="http://192.168.1.253/wiki/Image:Arctan.gif"><img longdesc="/wiki/Image:Arctan.gif" src="http://192.168.1.253/mw/images/8/85/Arctan.gif" alt="Image:Arctan.gif" width="568" height="670" /></a></p>
<p>输入文件</p>
<p>输入文件中只有一个正整数a ，其中1&lt;=a&lt;=60000 。</p>
<p>输出文件</p>
<p>输出文件中只有一个整数，为b + c的值。<br />
输入样例</p>
<pre>1</pre>
<p>输出样例</p>
<pre>5</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">聪明的打字员 </span></h2>
<p>阿兰是某机密部门的打字员，她现在接到一个任务：需要在一天之内输入几百个长度固定为6的密码。当然，她希望输入的过程中敲击键盘的总次数越少越好。</p>
<p>不幸的是，出于保密的需要，该部门用于输入密码的键盘是特殊设计的，键盘上没有数字键，而只有以下六个键：Swap0, Swap1, Up, Down, Left, Right，为了说明这6个键的作用，我们先定义录入区的6个位置的编号，从左至右依次为1，2，3，4，5，6。下面列出每个键的作用：</p>
<ul>
<li>Swap0：按Swap0，光标位置不变，将光标所在位置的数字与录入区的1号位置的数字（左起第一个数字）交换。如果光标已经处在录入区的1号位置，则按Swap0键之后，录入区的数字不变；</li>
<li>Swap1：按Swap1，光标位置不变，将光标所在位置的数字与录入区的6号位置的数字（左起第六个数字）交换。如果光标已经处在录入区的6号位置，则按Swap1键之后，录入区的数字不变；</li>
<li>Up：按Up，光标位置不变，将光标所在位置的数字加1（除非该数字是9）。例如，如果光标所在位置的数字为2，按Up之后，该处的数字变为3；如果该处数字为9，则按Up之后，数字不变，光标位置也不变；</li>
<li>Down：按Down，光标位置不变，将光标所在位置的数字减1（除非该数字是0），如果该处数字为0，则按Down之后，数字不变，光标位置也不变；</li>
<li>Left：按Left，光标左移一个位置，如果光标已经在录入区的1号位置（左起第一个位置）上，则光标不动；</li>
<li>Right：按Right，光标右移一个位置，如果光标已经在录入区的6号位置（左起第六个位置）上，则光标不动。</li>
</ul>
<p>当然，为了使这样的键盘发挥作用，每次录入密码之前，录入区总会随机出现一个长度为6的初始密码，而且光标固定出现在1号位置上。当巧妙地使用上述六个特殊键之后，可以得到目标密码，这时光标允许停在任何一个位置。 现在，阿兰需要你的帮助，编写一个程序，求出录入一个密码需要的最少的击键次数。</p>
<p>输入文件</p>
<p>文件仅一行，含有两个长度为6的数，前者为初始密码，后者为目标密码，两个密码之间用一个空格隔开。</p>
<p>输出文件</p>
<p>文件仅一行，含有一个正整数，为最少需要的击键次数。</p>
<p>输入样例</p>
<pre>123456 654321</pre>
<p>输出样例</p>
<pre>11</pre>
<p>样例说明：</p>
<p>初始密码是123456，光标停在数字1上。对应上述最少击键次数的击键序列为：</p>
<p><a class="image" title="Image:Clever.gif" href="http://192.168.1.253/wiki/Image:Clever.gif"><img longdesc="/wiki/Image:Clever.gif" src="http://192.168.1.253/mw/images/f/fc/Clever.gif" alt="Image:Clever.gif" width="308" height="501" /></a></p>
<p>最少的击键次数为11。</p></blockquote>
<blockquote>
<h2><span class="mw-headline">陨石的秘密</span></h2>
<p>公元11380年，一颗巨大的陨石坠落在南极。于是，灾难降临了，地球上出现了一系列反常的现象。当人们焦急万分的时候，一支中国科学家组成的南极考察队赶到了出事地点。经过一番侦察，科学家们发现陨石上刻有若干行密文，每一行都包含5个整数：</p>
<pre>1 1 1 1 6
0 0 6 3 57
8 0 11 3 2845</pre>
<p>著名的科学家SS发现，这些密文实际上是一种复杂运算的结果。为了便于大家理解这种运算，他定义了一种SS表达式：</p>
<ol>
<li>SS表达式是仅由‘{’，‘}’，‘[’，‘]’，‘（’，‘）’组成的字符串。</li>
<li>一个空串是SS表达式。</li>
<li>如果A是SS表达式，且A中不含字符‘{’，‘}’，‘[’，‘]’，则(A)是SS表达式。</li>
<li>如果A是SS表达式，且A中不含字符‘{’，‘}’，则[A]是SS表达式。</li>
<li>如果A是SS表达式，则{A}是SS表达式。</li>
<li>如果A和B都是SS表达式，则AB也是SS表达式。</li>
</ol>
<p>例如</p>
<ul>
<li>()(())[]</li>
<li>{()[()]}</li>
<li>{{[[(())]]}}</li>
</ul>
<p>都是SS表达式。</p>
<p>而</p>
<ul>
<li>()([])()</li>
<li>[()</li>
</ul>
<p>不是SS表达式。</p>
<p>一个SS表达式E的深度D(E)定义如下：</p>
<p>例如(){()}[]的深度为2。</p>
<p>密文中的复杂运算是这样进行的：</p>
<p>设密文中每行前4个数依次为L1，L2，L3，D，求出所有深度为D，含有L1对{}，L2对[]，L3对()的SS串的个数，并用这个数对当前的年份11380求余数，这个余数就是密文中每行的第5个数，我们称之为“神秘数”。</p>
<p>密文中某些行的第五个数已经模糊不清，而这些数字正是揭开陨石秘密的钥匙。现在科学家们聘请你来计算这个神秘数。</p>
<p>输入文件</p>
<p>共一行，4个整数L1，L2，L3，D。相邻两个数之间用一个空格分隔。（0≤L1≤10，0≤L2≤10，0≤L3≤10，0≤D≤30）</p>
<p>输出文件</p>
<p>共一行，包含一个整数，即神秘数。</p>
<p>输入样例</p>
<pre>1 1 1 2</pre>
<p>输出样例</p>
<pre>8</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">食物链 </span></h2>
<p>动物王国中有三类动物A,B,C，这三类动物的食物链构成了有趣的环形。A吃B， B吃C，C吃A。</p>
<p>现有N个动物，以1－N编号。每个动物都是A,B,C中的一种，但是我们并不知道它到底是哪一种。</p>
<p>有人用两种说法对这N个动物所构成的食物链关系进行描述：</p>
<ul>
<li>第一种说法是“1 X Y”，表示X和Y是同类。</li>
<li>第二种说法是“2 X Y”，表示X吃Y。</li>
</ul>
<p>此人对N个动物，用上述两种说法，一句接一句地说出K句话，这K句话有的是真的，有的是假的。当一句话满足下列三条之一时，这句话就是假话，否则就是真话。</p>
<ol>
<li>当前的话与前面的某些真的话冲突，就是假话；</li>
<li>当前的话中X或Y比N大，就是假话；</li>
<li>当前的话表示X吃X，就是假话。</li>
</ol>
<p>你的任务是根据给定的N（1&lt;=N&lt;=50,000）和K句话（0&lt;=K&lt;=100,000），输出假话的总数。</p>
<p>输入文件</p>
<p>第一行是两个整数N和K，以一个空格分隔。</p>
<p>以下K行每行是三个正整数 D，X，Y，两数之间用一个空格隔开，其中D表示说法的种类。</p>
<ul>
<li>若D=1，则表示X和Y是同类。</li>
<li>若D=2，则表示X吃Y。</li>
</ul>
<p>输出文件</p>
<p>只有一个整数，表示假话的数目。</p>
<p>输入样例</p>
<p>输入文件</p>
<pre>100 7
1 101 1
2 1 2
2 2 3
2 3 3
1 1 3
2 3 1
1 5 5</pre>
<p>输出样例</p>
<pre>3</pre>
<p>样例说明</p>
<p>对7句话的分析</p>
<ul>
<li>1 101 1   	假话</li>
<li>2 1 2     	真话</li>
<li>2 2 3     	真话</li>
<li>2 3 3     	假话</li>
<li>1 1 3     	假话</li>
<li>2 3 1     	真话</li>
<li>1 5 5     	真话</li>
</ul>
</blockquote>
<blockquote>
<h2><span class="mw-headline">炮兵阵地 </span></h2>
<p>司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成，地图的每一格可能是山地（用“H” 表示），也可能是平原（用“P”表示），如下图。在每一格平原地形上最多可以布置一支炮兵部队（山地上不能够部署炮兵部队）；一支炮兵部队在地图上的攻击 范围如图中黑色区域所示：</p>
<p>如果在地图中的灰色所标识的平原上部署一支炮兵部队，则图中的黑色的网格表示它能够攻击到的区域：沿横向左右各两格，沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地形的影响。</p>
<p>现在，将军们规划如何部署炮兵部队，在防止误伤的前提下（保证任何两支炮兵部队之间不能互相攻击，即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内），在整个地图区域内最多能够摆放多少我军的炮兵部队。</p>
<p><a class="image" title="Image:Cannon.gif" href="http://192.168.1.253/wiki/Image:Cannon.gif"><img longdesc="/wiki/Image:Cannon.gif" src="http://192.168.1.253/mw/images/0/08/Cannon.gif" alt="Image:Cannon.gif" width="257" height="184" /></a></p>
<p>输入文件</p>
<p>文件的第一行包含两个由空格分割开的正整数，分别表示N和M；</p>
<p>接下来的N行，每一行含有连续的M个字符（‘P’或者‘H’），中间没有空格。按顺序表示地图中每一行的数据。N≤100；M≤10。</p>
<p>输出文件</p>
<p>文件仅在第一行包含一个整数K，表示最多能摆放的炮兵部队的数量。</p>
<p>输入样例</p>
<pre>5 4
PHPP
PPHH
PPPP
PHPP
PHHP</pre>
<p>输出样例</p>
<pre>6</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">方程的解数 </span></h2>
<p>问题描述</p>
<p>已知一个n元高次方程：</p>
<p><a class="image" title="Image:Equation1.gif" href="http://192.168.1.253/wiki/Image:Equation1.gif"><img longdesc="/wiki/Image:Equation1.gif" src="http://192.168.1.253/mw/images/f/fb/Equation1.gif" alt="Image:Equation1.gif" width="308" height="41" /></a></p>
<p>其中：x1, x2, …,xn是未知数，k1,k2,…,kn是系数，p1,p2,…pn是指数。且方程中的所有数均为整数。</p>
<p>假设未知数1≤ xi ≤M, i=1,,,n，求这个方程的整数解的个数。</p>
<p>输入文件</p>
<p>文件的第1行包含一个整数n。第2行包含一个整数M。第3行到第n+2行，每行包含两个整数，分别表示ki和pi。两个整数之间用一个空格隔开。第3行的数据对应i=1，第n+2行的数据对应i=n。<br />
输出文件</p>
<p>文件仅一行，包含一个整数，表示方程的整数解的个数。</p>
<p>输入样例</p>
<pre>3
150
1 2
-1 2
1 2</pre>
<p>输出样例</p>
<pre>178</pre>
<p>约束条件</p>
<p>1&lt;=n&lt;=6；1&lt;=M&lt;=150；</p>
<p><a class="image" title="Image:Equation2.gif" href="http://192.168.1.253/wiki/Image:Equation2.gif"><img longdesc="/wiki/Image:Equation2.gif" src="http://192.168.1.253/mw/images/4/4a/Equation2.gif" alt="Image:Equation2.gif" width="300" height="36" /></a></p>
<p>方程的整数解的个数小于2^31。</p>
<p>★本题中，指数Pi(i=1,2,……,n)均为正整数。</p></blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/noi-2000-solution/" title="NOI 2000 解题报告">NOI 2000 解题报告</a></li><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-1999-solution/" title="NOI 1999 解题报告">NOI 1999 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-1998-solution/" title="NOI 1998 解题报告">NOI 1998 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-1997-solution/" title="NOI 1997 解题报告">NOI 1997 解题报告</a></li><li><a href="http://www.byvoid.com/blog/poi-2000-pro/" title="POI 2000 Promotion 促销活动">POI 2000 Promotion 促销活动</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/noi-2001-solution/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<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('p853code16'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p85316"><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="p853code16"><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>
		<item>
		<title>POI 2001 Glodmine 金矿</title>
		<link>http://www.byvoid.com/blog/poi-2001-kop/</link>
		<comments>http://www.byvoid.com/blog/poi-2001-kop/#comments</comments>
		<pubDate>Sat, 07 Feb 2009 09:26:45 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[POI]]></category>
		<category><![CDATA[2001]]></category>
		<category><![CDATA[Treap]]></category>
		<category><![CDATA[扫描]]></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=849</guid>
		<description><![CDATA[发现坐标的范围很大，而点并不是很多，首先想到了离散化的方法。然后横向扫描每个带状的区间，对于每个带状区间，再纵向扫描其中点的个数。这种方法是最容易想到的，但是时间复杂度... ]]></description>
			<content:encoded><![CDATA[<p>发现坐标的范围很大，而点并不是很多，首先想到了离散化的方法。然后横向扫描每个带状的区间，对于每个带状区间，再纵向扫描其中点的个数。这种方法是最容易想到的，但是时间复杂度却高达O(N^2logN)。关键在于优化每次确定带状区间的纵向扫描。</p>
<p>显然对于确定的带状区间，我们扫描时只需考虑它们的纵坐标。如果我们把一个纵坐标为y的点描述成两个事件(y,1)和 (y+h+1,-1)，然后把所有事件按照第一关键字排序，定义S[i]为前i项事件的第二关键字之和，那么Max{S[i]}就是确定的带状区间内高度 为w的矩形最多覆盖到的点数。为什么是这样，我们可以想象有两个挡板，分别是y=A-h-1(下板)和y=A(上板)，从下向上移动挡板，从而确定一个矩 形。某个点的第一个事件为(y,1)，当上板A=y时，该点被覆盖，若A继续增大，使得A-h-1=y，该点就恰好离开了覆盖区域，反过来我们可以以为是 A=y+h+1，所以定义第二个事件为(y+h+1,-1)。这样，前i个事件的第二关键字和S[i]，就代表了矩形在某个位置时覆盖的点数。S[i]的 最大值就是确定的带状区间内最大的覆盖点数。</p>
<p>带状区间的左右扫描，也可以考虑成两个挡板之间的问题，首先确定挡板的初始位置在最左端，依次向右移动左右两个挡板。确定一个区间后，统 计点事件的最大前缀和成了最关键的问题。由于左右挡板是移动的，我们需要动态统计一个排序结构。于是我们想到了用平衡树，维护每个点事件的第一关键字(y 坐标)升序，并记录权。移动右挡板时，把右挡边新位置所在线上的所有点对应的两个点事件加入平衡树；移动左挡板时，把左挡板时，把左挡边所在线上的所有点 事件从平衡树中删除。</p>
<p>为了快速统计出最大的前缀和，在此基础上，我们还需要对于平衡树中每个节点维护其子树所有节点权值和，以及子树中最大的前缀和。定义p的权值为p.w，以节点p为根的子树的权值和为p.s，以节点p为根的子树的最大的前缀和为p.m，我们可以递推算出p.m的值。</p>
<pre>p.m=Max{
	p.left.m; //最大前缀和的尾元素在左子树
	p.left.s+p.w; //最大前缀和的尾元素就是p
	p.left.s+p.w+p.right.m; //最大前缀和的尾元素在右子树
}</pre>
<p>于是全部序列的最大前缀和就是根节点root.m。</p>
<p>于是得到的算法如下：</p>
<ol>
<li>建立离散化坐标系;</li>
<li>左右扫描，确定带状区间，维护平衡树中节点;</li>
<li>统计对于确定带状区间，平衡树中元素最大的前缀和;</li>
</ol>
<p>算法总的时间复杂度为O(NlogN)，可以解决问题了。编程中细节要注意，尤其是在于平衡树维护平衡性时要对节点m值重新计算。我用了 Treap，在插入一个点要旋转时，注意要先重新计算旋转到子树的点的m值，再计算子树根节点的m值。而删除仅仅懒惰删除即可，重要的是维护m值。<br />
<span id="more-849"></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('p849code18'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p84918"><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
</pre></td><td class="code" id="p849code18"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: POI2001 kop
 * Author: Guo Jiabao
 * Time: 2009.2.7 16:16
 * 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;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;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">15001</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> point<span style="color: #008000;">&#123;</span><span style="color: #0000ff;">int</span> x,y<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> linknode<span style="color: #008000;">&#123;</span><span style="color: #0000ff;">int</span> s<span style="color: #008080;">;</span>linknode <span style="color: #000040;">*</span>next<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">class</span> Treap_node
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</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> fix,weight,sum,m,key<span style="color: #008080;">;</span>
		Treap_node<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> tk,<span style="color: #0000ff;">int</span> w<span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>key<span style="color: #008000;">&#40;</span>tk<span style="color: #008000;">&#41;</span>,weight<span style="color: #008000;">&#40;</span>w<span style="color: #008000;">&#41;</span>,sum<span style="color: #008000;">&#40;</span>w<span style="color: #008000;">&#41;</span>,m<span style="color: #008000;">&#40;</span>w<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>fix<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>left<span style="color: #000080;">=</span>right<span style="color: #000080;">=</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> leftsum <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>sum<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> rightsum<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>sum<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;">int</span> H,W<span style="color: #008080;">;</span><span style="color: #666666;">//区域高度 宽度</span>
<span style="color: #0000ff;">int</span> N,L,Lc<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,MaxAns<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> D<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
point P<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
linknode LS<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,<span style="color: #000040;">*</span>Line<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
Treap_node <span style="color: #000040;">*</span>Treap_root<span style="color: #008080;">;</span>
&nbsp;
<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>
	q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #000040;">+</span><span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>rightsum<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>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>rightsum<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>rightsum<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>
	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>
<span style="color: #008000;">&#125;</span>
&nbsp;
<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>
	q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #000040;">+</span><span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>leftsum<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>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>leftsum<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>leftsum<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>
	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>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Treap_maintain<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>
	<span style="color: #0000ff;">int</span> lm,ls,rm<span style="color: #008080;">;</span>
	lm<span style="color: #000080;">=</span>ls<span style="color: #000080;">=</span>rm<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>left<span style="color: #008000;">&#41;</span>
		lm<span style="color: #000080;">=</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>m,ls<span style="color: #000080;">=</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>sum<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: #008000;">&#41;</span>
		rm<span style="color: #000080;">=</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>m<span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m<span style="color: #000080;">=</span>lm<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ls <span style="color: #000040;">+</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight <span style="color: #000080;">&gt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m<span style="color: #008000;">&#41;</span>	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m <span style="color: #000080;">=</span> ls <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: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ls <span style="color: #000040;">+</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight <span style="color: #000040;">+</span> rm <span style="color: #000080;">&gt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m<span style="color: #008000;">&#41;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m<span style="color: #000080;">=</span>ls <span style="color: #000040;">+</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight <span style="color: #000040;">+</span> rm<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Treap_edit<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: #0000ff;">int</span> delta<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><span style="color: #0000dd;">new</span> Treap_node<span style="color: #008000;">&#40;</span>v,delta<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</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>key <span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #000040;">+</span><span style="color: #000080;">=</span>delta<span style="color: #008080;">;</span>
			Treap_edit<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left,v,delta<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;">&amp;&amp;</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>
			<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_maintain<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>
			Treap_maintain<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>key <span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #000040;">+</span><span style="color: #000080;">=</span>delta<span style="color: #008080;">;</span>
			Treap_edit<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right,v,delta<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;">&amp;&amp;</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>
			<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_maintain<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>
			Treap_maintain<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>
			p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #000040;">+</span><span style="color: #000080;">=</span>delta<span style="color: #008080;">;</span>
			p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sum<span style="color: #000040;">+</span><span style="color: #000080;">=</span>delta<span style="color: #008080;">;</span>
			Treap_maintain<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: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> linktable_ins<span style="color: #008000;">&#40;</span>linknode <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>p<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		linknode <span style="color: #000040;">*</span>t<span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
		p<span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>LS<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Lc<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span>t<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
		p<span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>LS<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>Lc<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	LS<span style="color: #008000;">&#91;</span>Lc<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>v<span style="color: #008080;">;</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: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;kop.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;kop.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%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>W,<span style="color: #000040;">&amp;</span>H,<span style="color: #000040;">&amp;</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><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>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</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>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> cmp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>a,<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>point <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>a<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x <span style="color: #000040;">-</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>point <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>b<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> discrete<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//离散化横坐标 建立链表</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,lastv<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>P<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,N,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,cmp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	L<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>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: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>lastv<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			lastv<span style="color: #000080;">=</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>
			D<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>L<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>
			linktable_ins<span style="color: #008000;">&#40;</span>Line<span style="color: #008000;">&#91;</span>L<span style="color: #008000;">&#93;</span>,P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
			linktable_ins<span style="color: #008000;">&#40;</span>Line<span style="color: #008000;">&#91;</span>L<span style="color: #008000;">&#93;</span>,P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</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> RemoveLine<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>linknode <span style="color: #000040;">*</span>k<span style="color: #000080;">=</span>Line<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>k<span style="color: #008080;">;</span>k<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		Treap_edit<span style="color: #008000;">&#40;</span>Treap_root,k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>s,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		Treap_edit<span style="color: #008000;">&#40;</span>Treap_root,k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>s<span style="color: #000040;">+</span>H<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</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> AddLine<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>linknode <span style="color: #000040;">*</span>k<span style="color: #000080;">=</span>Line<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>k<span style="color: #008080;">;</span>k<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		Treap_edit<span style="color: #008000;">&#40;</span>Treap_root,k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>s,<span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		Treap_edit<span style="color: #008000;">&#40;</span>Treap_root,k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>s<span style="color: #000040;">+</span>H<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #0000ff;">void</span> scanx<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//横向扫描 确定区间</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> Lb,Rb<span style="color: #008080;">;</span>
	AddLine<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>Lb<span style="color: #000080;">=</span>Rb<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>Rb<span style="color: #000080;">&lt;</span>L <span style="color: #000040;">&amp;&amp;</span> Lb<span style="color: #000080;">&lt;=</span>L<span style="color: #008080;">;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Rb<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;=</span>L <span style="color: #000040;">&amp;&amp;</span> D<span style="color: #008000;">&#91;</span>Rb<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>D<span style="color: #008000;">&#91;</span>Lb<span style="color: #008000;">&#93;</span><span style="color: #000080;">&lt;=</span>W<span style="color: #008000;">&#41;</span>
			AddLine<span style="color: #008000;">&#40;</span><span style="color: #000040;">++</span>Rb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Treap_root<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m<span style="color: #000080;">&gt;</span>MaxAns<span style="color: #008000;">&#41;</span>
			MaxAns<span style="color: #000080;">=</span>Treap_root<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m<span style="color: #008080;">;</span>
		RemoveLine<span style="color: #008000;">&#40;</span>Lb<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</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> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	discrete<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	scanx<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,MaxAns<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</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>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<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: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<blockquote>
<h2><span class="mw-headline">金矿 </span></h2>
<p>问题描述</p>
<p>金矿的老师傅年底要退休了。经理为了奖赏他的尽职尽责的工作，决定在一块包含 n(n ≤ 15000) 个采金点的长方形土地中划出一块长度为 S ，宽度为 W 的区域奖励给他(1 ≤ s , w ≤ 10 000)。老师傅可以自己选择这块地的位置，显然其 中包含的采金点越多越好。你的任务就是计算最多能得到多少个采金点。如果一个采金点的位置在长方形的边上，它也应当被计算在内。</p>
<p>输入格式</p>
<p>输入文件的第一行有两个整数,中间用一个空格隔开，表示长方形土地的长和宽即s和w(1&lt;=s,w&lt;=10 000)。第二行有一个整数n(1&lt;=n&lt;=15 000)，表示金矿数量。下面的n行与金矿相对应，每行两个整数x和y (-30 000&lt;=x,y&lt;=30 000),中间用一个空格隔开，表示金矿的坐标。</p>
<p>输出格式</p>
<p>输出文件只有一个整数，表示选择的最大金矿的数。</p>
<p>输入样例</p>
<pre>1 2
12
0 0
1 1
2 2
3 3
4 5
5 5
4 2
1 4
0 5
5 0
2 3
3 2</pre>
<p>输出样例</p>
<pre>4</pre>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/poi-2001-prz/" title="POI 2001 Intervals 区间">POI 2001 Intervals 区间</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-map/" title="POI 2001 Density Map 密度图">POI 2001 Density Map 密度图</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-pch/" title="POI 2001 Wandering flea trainers 跳舞蝇的教练">POI 2001 Wandering flea trainers 跳舞蝇的教练</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-pod/" title="POI 2001 Travel 旅行">POI 2001 Travel 旅行</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-mro/" title="POI 2001 Ants and the ladybug 蚂蚁和瓢虫">POI 2001 Ants and the ladybug 蚂蚁和瓢虫</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-spo/" title="POI 2001 Peaceful Commission 和平委员会">POI 2001 Peaceful Commission 和平委员会</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/poi-2001-kop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
