﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-yzhw@ujs code my life~</title><link>http://www.cppblog.com/yzhw/</link><description>江苏大学</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:40:24 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:40:24 GMT</pubDate><ttl>60</ttl><item><title>pku3908 并查集的一点小变通</title><link>http://www.cppblog.com/yzhw/archive/2012/02/22/166244.html</link><dc:creator>yzhw</dc:creator><author>yzhw</author><pubDate>Wed, 22 Feb 2012 07:58:00 GMT</pubDate><guid>http://www.cppblog.com/yzhw/archive/2012/02/22/166244.html</guid><wfw:comment>http://www.cppblog.com/yzhw/comments/166244.html</wfw:comment><comments>http://www.cppblog.com/yzhw/archive/2012/02/22/166244.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yzhw/comments/commentRss/166244.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yzhw/services/trackbacks/166244.html</trackback:ping><description><![CDATA[题目大意这样，给出一些节点，给出3种命令：<br />1、将a,b联通<br />2、查询a,b的联通状况<br />3、删除链接a的边。（如果之前a,c通过b联通，那么删除b的联通关系后a,c仍然认为联通）<br />1，2两种操作乍一看MS是并查集，但是第三种状况让人很恼火，尤其是想用路径压缩技巧的时候。那么，我们不妨转换下思路，删除a的联通关系可以认为将a节点重标号，把之前那个a节点认为是虚拟节点，这样联通性啥的都好保证了。详细请看代码：<br /><div style="display: inline-block; "><div><p align="center" style="font-family: 'AR PL UKai CN'; line-height: normal; font-size: medium; "><font size="4" color="#333399">Source Code</font></p><table align="center" style="font-family: 'AR PL UKai CN'; font-size: 10pt; "><tbody><tr><td><strong>Problem:</strong>&nbsp;<a href="http://poj.org/problem?id=3908">3908</a></td><td width="10px"></td><td><strong>User:</strong>&nbsp;<a href="http://poj.org/userstatus?user_id=yzhw">yzhw</a></td></tr><tr><td><strong>Memory:</strong>&nbsp;1096K</td><td width="10px"></td><td><strong>Time:</strong>&nbsp;47MS</td></tr><tr><td><strong>Language:</strong>&nbsp;G++</td><td width="10px"></td><td><strong>Result:</strong>&nbsp;<font color="blue">Accepted</font></td></tr></tbody></table><ul style="font-family: 'AR PL UKai CN'; line-height: normal; font-size: medium; "><li><font color="#333399" size="5">Source Code</font></li><pre class="sh_cpp sh_sourceCode" style="background-color: white; font-family: 'Courier New', Courier, monospace; "><span class="sh_preproc" style="color: #00008b; font-weight: bold; "># include</span> <span class="sh_string" style="color: red; font-family: monospace; ">&lt;cstdio&gt;</span>
<span class="sh_preproc" style="color: #00008b; font-weight: bold; "># define</span> N <span class="sh_number" style="color: purple; ">100000</span>
<span class="sh_keyword" style="color: blue; font-weight: bold; ">using</span> <span class="sh_keyword" style="color: blue; font-weight: bold; ">namespace</span> std<span class="sh_symbol" style="color: #8b0000; ">;</span>
<span class="sh_type" style="color: #006400; ">int</span> set<span class="sh_symbol" style="color: #8b0000; ">[</span>N<span class="sh_symbol" style="color: #8b0000; ">],</span>id<span class="sh_symbol" style="color: #8b0000; ">[</span>N<span class="sh_symbol" style="color: #8b0000; ">];</span>
<span class="sh_type" style="color: #006400; ">int</span> <span class="sh_function" style="font-weight: bold; ">find</span><span class="sh_symbol" style="color: #8b0000; ">(</span><span class="sh_type" style="color: #006400; ">int</span> pos<span class="sh_symbol" style="color: #8b0000; ">)</span>
<span class="sh_cbracket" style="color: red; ">{</span>
	<span class="sh_keyword" style="color: blue; font-weight: bold; ">if</span><span class="sh_symbol" style="color: #8b0000; ">(</span>set<span class="sh_symbol" style="color: #8b0000; ">[</span>pos<span class="sh_symbol" style="color: #8b0000; ">]==</span>pos<span class="sh_symbol" style="color: #8b0000; ">)</span> <span class="sh_keyword" style="color: blue; font-weight: bold; ">return</span> pos<span class="sh_symbol" style="color: #8b0000; ">;</span>
	<span class="sh_keyword" style="color: blue; font-weight: bold; ">else</span> <span class="sh_keyword" style="color: blue; font-weight: bold; ">return</span> set<span class="sh_symbol" style="color: #8b0000; ">[</span>pos<span class="sh_symbol" style="color: #8b0000; ">]=</span><span class="sh_function" style="font-weight: bold; ">find</span><span class="sh_symbol" style="color: #8b0000; ">(</span>set<span class="sh_symbol" style="color: #8b0000; ">[</span>pos<span class="sh_symbol" style="color: #8b0000; ">]);</span>
<span class="sh_cbracket" style="color: red; ">}</span>
<span class="sh_type" style="color: #006400; ">void</span> <span class="sh_function" style="font-weight: bold; ">uni</span><span class="sh_symbol" style="color: #8b0000; ">(</span><span class="sh_type" style="color: #006400; ">int</span> a<span class="sh_symbol" style="color: #8b0000; ">,</span><span class="sh_type" style="color: #006400; ">int</span> b<span class="sh_symbol" style="color: #8b0000; ">)</span>
<span class="sh_cbracket" style="color: red; ">{</span>
	set<span class="sh_symbol" style="color: #8b0000; ">[</span><span class="sh_function" style="font-weight: bold; ">find</span><span class="sh_symbol" style="color: #8b0000; ">(</span>a<span class="sh_symbol" style="color: #8b0000; ">)]=</span><span class="sh_function" style="font-weight: bold; ">find</span><span class="sh_symbol" style="color: #8b0000; ">(</span>b<span class="sh_symbol" style="color: #8b0000; ">);</span>
<span class="sh_cbracket" style="color: red; ">}</span>
<span class="sh_type" style="color: #006400; ">int</span> <span class="sh_function" style="font-weight: bold; ">main</span><span class="sh_symbol" style="color: #8b0000; ">()</span>
<span class="sh_cbracket" style="color: red; ">{</span>
	<span class="sh_type" style="color: #006400; ">int</span> num<span class="sh_symbol" style="color: #8b0000; ">;</span>
	<span class="sh_keyword" style="color: blue; font-weight: bold; ">while</span><span class="sh_symbol" style="color: #8b0000; ">(</span><span class="sh_function" style="font-weight: bold; ">scanf</span><span class="sh_symbol" style="color: #8b0000; ">(</span><span class="sh_string" style="color: red; font-family: monospace; ">"%d"</span><span class="sh_symbol" style="color: #8b0000; ">,&amp;</span>num<span class="sh_symbol" style="color: #8b0000; ">)!=</span>EOF<span class="sh_symbol" style="color: #8b0000; ">)</span>
	<span class="sh_cbracket" style="color: red; ">{</span>
		<span class="sh_type" style="color: #006400; ">int</span> c<span class="sh_symbol" style="color: #8b0000; ">=</span>num<span class="sh_number" style="color: purple; ">+1</span><span class="sh_symbol" style="color: #8b0000; ">,</span>n1<span class="sh_symbol" style="color: #8b0000; ">=</span><span class="sh_number" style="color: purple; ">0</span><span class="sh_symbol" style="color: #8b0000; ">,</span>n2<span class="sh_symbol" style="color: #8b0000; ">=</span><span class="sh_number" style="color: purple; ">0</span><span class="sh_symbol" style="color: #8b0000; ">;</span>
		<span class="sh_keyword" style="color: blue; font-weight: bold; ">for</span><span class="sh_symbol" style="color: #8b0000; ">(</span><span class="sh_type" style="color: #006400; ">int</span> i<span class="sh_symbol" style="color: #8b0000; ">=</span><span class="sh_number" style="color: purple; ">1</span><span class="sh_symbol" style="color: #8b0000; ">;</span>i<span class="sh_symbol" style="color: #8b0000; ">&lt;</span>N<span class="sh_symbol" style="color: #8b0000; ">;</span>i<span class="sh_symbol" style="color: #8b0000; ">++)</span> set<span class="sh_symbol" style="color: #8b0000; ">[</span>i<span class="sh_symbol" style="color: #8b0000; ">]=</span>i<span class="sh_symbol" style="color: #8b0000; ">;</span>
		<span class="sh_keyword" style="color: blue; font-weight: bold; ">for</span><span class="sh_symbol" style="color: #8b0000; ">(</span><span class="sh_type" style="color: #006400; ">int</span> i<span class="sh_symbol" style="color: #8b0000; ">=</span><span class="sh_number" style="color: purple; ">1</span><span class="sh_symbol" style="color: #8b0000; ">;</span>i<span class="sh_symbol" style="color: #8b0000; ">&lt;=</span>num<span class="sh_symbol" style="color: #8b0000; ">;</span>i<span class="sh_symbol" style="color: #8b0000; ">++)</span> id<span class="sh_symbol" style="color: #8b0000; ">[</span>i<span class="sh_symbol" style="color: #8b0000; ">]=</span>i<span class="sh_symbol" style="color: #8b0000; ">;</span>
		<span class="sh_type" style="color: #006400; ">char</span> jud<span class="sh_symbol" style="color: #8b0000; ">[</span><span class="sh_number" style="color: purple; ">5</span><span class="sh_symbol" style="color: #8b0000; ">];</span>
		<span class="sh_keyword" style="color: blue; font-weight: bold; ">while</span><span class="sh_symbol" style="color: #8b0000; ">(</span><span class="sh_function" style="font-weight: bold; ">scanf</span><span class="sh_symbol" style="color: #8b0000; ">(</span><span class="sh_string" style="color: red; font-family: monospace; ">"%s"</span><span class="sh_symbol" style="color: #8b0000; ">,</span>jud<span class="sh_symbol" style="color: #8b0000; ">)&amp;&amp;*</span>jud<span class="sh_symbol" style="color: #8b0000; ">!=</span><span class="sh_string" style="color: red; font-family: monospace; ">'e'</span><span class="sh_symbol" style="color: #8b0000; ">)</span>
		<span class="sh_cbracket" style="color: red; ">{</span>
			<span class="sh_type" style="color: #006400; ">int</span> a<span class="sh_symbol" style="color: #8b0000; ">,</span>b<span class="sh_symbol" style="color: #8b0000; ">;</span>
			<span class="sh_keyword" style="color: blue; font-weight: bold; ">switch</span><span class="sh_symbol" style="color: #8b0000; ">(*</span>jud<span class="sh_symbol" style="color: #8b0000; ">)</span>
			<span class="sh_cbracket" style="color: red; ">{</span>
			<span class="sh_keyword" style="color: blue; font-weight: bold; ">case</span> <span class="sh_string" style="color: red; font-family: monospace; ">'c'</span><span class="sh_symbol" style="color: #8b0000; ">:</span>
				<span class="sh_function" style="font-weight: bold; ">scanf</span><span class="sh_symbol" style="color: #8b0000; ">(</span><span class="sh_string" style="color: red; font-family: monospace; ">"%d%d"</span><span class="sh_symbol" style="color: #8b0000; ">,&amp;</span>a<span class="sh_symbol" style="color: #8b0000; ">,&amp;</span>b<span class="sh_symbol" style="color: #8b0000; ">);</span>
				<span class="sh_function" style="font-weight: bold; ">uni</span><span class="sh_symbol" style="color: #8b0000; ">(</span>id<span class="sh_symbol" style="color: #8b0000; ">[</span>a<span class="sh_symbol" style="color: #8b0000; ">],</span>id<span class="sh_symbol" style="color: #8b0000; ">[</span>b<span class="sh_symbol" style="color: #8b0000; ">]);</span>
				<span class="sh_keyword" style="color: blue; font-weight: bold; ">break</span><span class="sh_symbol" style="color: #8b0000; ">;</span>
			<span class="sh_keyword" style="color: blue; font-weight: bold; ">case</span> <span class="sh_string" style="color: red; font-family: monospace; ">'d'</span><span class="sh_symbol" style="color: #8b0000; ">:</span>
				<span class="sh_function" style="font-weight: bold; ">scanf</span><span class="sh_symbol" style="color: #8b0000; ">(</span><span class="sh_string" style="color: red; font-family: monospace; ">"%d"</span><span class="sh_symbol" style="color: #8b0000; ">,&amp;</span>a<span class="sh_symbol" style="color: #8b0000; ">);</span>
				id<span class="sh_symbol" style="color: #8b0000; ">[</span>a<span class="sh_symbol" style="color: #8b0000; ">]=</span>c<span class="sh_symbol" style="color: #8b0000; ">++;</span>
				<span class="sh_keyword" style="color: blue; font-weight: bold; ">break</span><span class="sh_symbol" style="color: #8b0000; ">;</span>
			<span class="sh_keyword" style="color: blue; font-weight: bold; ">case</span> <span class="sh_string" style="color: red; font-family: monospace; ">'q'</span><span class="sh_symbol" style="color: #8b0000; ">:</span>
				<span class="sh_function" style="font-weight: bold; ">scanf</span><span class="sh_symbol" style="color: #8b0000; ">(</span><span class="sh_string" style="color: red; font-family: monospace; ">"%d%d"</span><span class="sh_symbol" style="color: #8b0000; ">,&amp;</span>a<span class="sh_symbol" style="color: #8b0000; ">,&amp;</span>b<span class="sh_symbol" style="color: #8b0000; ">);</span>
				<span class="sh_keyword" style="color: blue; font-weight: bold; ">if</span><span class="sh_symbol" style="color: #8b0000; ">(</span><span class="sh_function" style="font-weight: bold; ">find</span><span class="sh_symbol" style="color: #8b0000; ">(</span>id<span class="sh_symbol" style="color: #8b0000; ">[</span>a<span class="sh_symbol" style="color: #8b0000; ">])==</span><span class="sh_function" style="font-weight: bold; ">find</span><span class="sh_symbol" style="color: #8b0000; ">(</span>id<span class="sh_symbol" style="color: #8b0000; ">[</span>b<span class="sh_symbol" style="color: #8b0000; ">]))</span> n1<span class="sh_symbol" style="color: #8b0000; ">++;</span>
				<span class="sh_keyword" style="color: blue; font-weight: bold; ">else</span> n2<span class="sh_symbol" style="color: #8b0000; ">++;</span>
				<span class="sh_keyword" style="color: blue; font-weight: bold; ">break</span><span class="sh_symbol" style="color: #8b0000; ">;</span>
			<span class="sh_cbracket" style="color: red; ">}</span><span class="sh_symbol" style="color: #8b0000; ">;</span>

		<span class="sh_cbracket" style="color: red; ">}</span>
		<span class="sh_function" style="font-weight: bold; ">printf</span><span class="sh_symbol" style="color: #8b0000; ">(</span><span class="sh_string" style="color: red; font-family: monospace; ">"%d , %d</span><span class="sh_specialchar" style="color: #ffc0cb; font-family: monospace; ">\n</span><span class="sh_string" style="color: red; font-family: monospace; ">"</span><span class="sh_symbol" style="color: #8b0000; ">,</span>n1<span class="sh_symbol" style="color: #8b0000; ">,</span>n2<span class="sh_symbol" style="color: #8b0000; ">);</span>
	<span class="sh_cbracket" style="color: red; ">}</span>
	<span class="sh_keyword" style="color: blue; font-weight: bold; ">return</span> <span class="sh_number" style="color: purple; ">0</span><span class="sh_symbol" style="color: #8b0000; ">;</span>
<span class="sh_cbracket" style="color: red; ">}</span></pre></ul></div></div><img src ="http://www.cppblog.com/yzhw/aggbug/166244.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yzhw/" target="_blank">yzhw</a> 2012-02-22 15:58 <a href="http://www.cppblog.com/yzhw/archive/2012/02/22/166244.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku3907 求多边形面积</title><link>http://www.cppblog.com/yzhw/archive/2012/02/18/165874.html</link><dc:creator>yzhw</dc:creator><author>yzhw</author><pubDate>Fri, 17 Feb 2012 17:34:00 GMT</pubDate><guid>http://www.cppblog.com/yzhw/archive/2012/02/18/165874.html</guid><wfw:comment>http://www.cppblog.com/yzhw/comments/165874.html</wfw:comment><comments>http://www.cppblog.com/yzhw/archive/2012/02/18/165874.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yzhw/comments/commentRss/165874.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yzhw/services/trackbacks/165874.html</trackback:ping><description><![CDATA[解法就是用有向面积法，叉积就可以。最后如果是负数的话取个相反数就OK了，代码也很简单，如下。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;Show&nbsp;Code&nbsp;-&nbsp;Run&nbsp;ID&nbsp;1166912<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;Submit&nbsp;Time:&nbsp;2012-02-18&nbsp;01:33:04&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Language:&nbsp;GNU&nbsp;C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:&nbsp;Accepted<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pid:&nbsp;3124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Time:&nbsp;0.00&nbsp;sec.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Memory:&nbsp;852&nbsp;K.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Code&nbsp;Length:&nbsp;0.6&nbsp;K.<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#&nbsp;include&nbsp;&lt;stdio.h&gt;<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#&nbsp;define&nbsp;cross(x1,y1,x2,y2)&nbsp;(x1)*(y2)-(x2)*(y1)<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#&nbsp;define&nbsp;get_aera(x0,y0,x1,y1,x2,y2)&nbsp;(cross((x1)-(x0),(y1)-(y0),(x2)-(x0),(y2)-(y0)))<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;{<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d",&amp;n)!=EOF&amp;&amp;n)<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i;<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;x[3],y[3],aera=0;<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%lf%lf",&amp;x[2],&amp;y[2]);<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i=1;i&lt;n;i++)<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%lf%lf",&amp;x[i%2],&amp;y[i%2]);<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(i&gt;1)&nbsp;aera+=get_aera(x[2],y[2],x[(i+1)%2],y[(i+1)%2],x[i%2],y[i%2]);<br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aera*=0.5;<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(aera&lt;0)&nbsp;aera=-aera;<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%.0f\n",aera+1e-8);<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">28</span>&nbsp;}</div><img src ="http://www.cppblog.com/yzhw/aggbug/165874.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yzhw/" target="_blank">yzhw</a> 2012-02-18 01:34 <a href="http://www.cppblog.com/yzhw/archive/2012/02/18/165874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku3905 2-SAT问题 &amp;我对2-SAT问题的最新理解</title><link>http://www.cppblog.com/yzhw/archive/2012/02/17/165796.html</link><dc:creator>yzhw</dc:creator><author>yzhw</author><pubDate>Thu, 16 Feb 2012 18:38:00 GMT</pubDate><guid>http://www.cppblog.com/yzhw/archive/2012/02/17/165796.html</guid><wfw:comment>http://www.cppblog.com/yzhw/comments/165796.html</wfw:comment><comments>http://www.cppblog.com/yzhw/archive/2012/02/17/165796.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yzhw/comments/commentRss/165796.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yzhw/services/trackbacks/165796.html</trackback:ping><description><![CDATA[最近看了人工智能的确定性推理，对2-SAT有了更深的理解，感觉2-SAT构图过程就是构建的一个推理图，逻辑关系是a-&gt;b。根据这题实际来讲讲<br />就用第一种情况来举例吧<br />A被选或者B被选或者两者都发生都是可以被接受的。<br />那么如果A没有被选，我们能推出B被选了。同样如果B没有被选，我们能推出A被选了，其他我们不能推出任何结论。<br />所以构造关系<br />!B-&gt;A<br />!A-&gt;B<br />反应到图上就是两条边。<br />这样构图完成后找出图里所有的强连通分量，如果A和!A在同一个强连通分量里，那么就冲突了。（我们能推理出A-&gt;!A）<br />代码：<span style="background-color: #eeeeee; font-size: 13px; color: #008080; ">&nbsp;1</span><span style="background-color: #eeeeee; font-size: 13px; ">&nbsp;</span><span style="background-color: #eeeeee; font-size: 13px; ">Source&nbsp;Code</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #008080; ">&nbsp;2</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;Problem:&nbsp;3905&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User:&nbsp;yzhw<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;Memory:&nbsp;16168K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Time:&nbsp;2297MS<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;Language:&nbsp;GCC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:&nbsp;Accepted<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;Source&nbsp;Code<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#&nbsp;include&nbsp;&lt;stdio.h&gt;<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#&nbsp;include&nbsp;&lt;stdlib.h&gt;<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#&nbsp;include&nbsp;&lt;<span style="color: #0000FF; ">string</span>.h&gt;<br /><span style="color: #008080; ">10</span>&nbsp;#&nbsp;define&nbsp;N&nbsp;2000<br /><span style="color: #008080; ">11</span>&nbsp;#&nbsp;define&nbsp;M&nbsp;1000000*2<br /><span style="color: #008080; ">12</span>&nbsp;#&nbsp;define&nbsp;min(a,b)&nbsp;((a)&lt;(b)?(a):(b))<br /><span style="color: #008080; ">13</span>&nbsp;#&nbsp;define&nbsp;abs(a)&nbsp;((a)&gt;0?(a):-(a))<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,m;<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;p,nxt[M],g[N],v[M];<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;stack[N],sp,dfn,low[N];<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;insert(<span style="color: #0000FF; ">int</span>&nbsp;a,<span style="color: #0000FF; ">int</span>&nbsp;b)<br /><span style="color: #008080; ">18</span>&nbsp;{<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[p]=b;<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nxt[p]=g[a];<br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g[a]=p++;<br /><span style="color: #008080; ">22</span>&nbsp;}<br /><span style="color: #008080; ">23</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dfs(<span style="color: #0000FF; ">int</span>&nbsp;pos)<br /><span style="color: #008080; ">24</span>&nbsp;{<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;minnum=dfn++;<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;p;<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[sp++]=pos;<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[pos]=minnum;<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(p=g[pos];p!=-1;p=nxt[p])<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(low[v[p]]==-1)<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!dfs(v[p]))&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minnum=min(minnum,low[v[p]]);<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(minnum&lt;low[pos])&nbsp;low[pos]=minnum;<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">do</span><br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[stack[sp-1]]=N;<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(abs(stack[sp-1]-pos)==n)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp--;<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span style="color: #0000FF; ">while</span>(stack[sp]!=pos);<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;<br /><span style="color: #008080; ">46</span>&nbsp;}<br /><span style="color: #008080; ">47</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()<br /><span style="color: #008080; ">48</span>&nbsp;{<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d%d",&amp;n,&amp;m)!=EOF)<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i,flag=1;<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(g,-1,<span style="color: #0000FF; ">sizeof</span>(g));<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p=0;<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i=0;i&lt;m;i++)<br /><span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;str1[32],str2[32];<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;num1,num2;<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%s%s",str1,str2);<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num1=atoi(str1+1)-1;<br /><span style="color: #008080; ">60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num2=atoi(str2+1)-1;<br /><span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(*str1=='+'&amp;&amp;*str2=='+')<br /><span style="color: #008080; ">62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(num1+n,num2);<br /><span style="color: #008080; ">64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(num2+n,num1);<br /><span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(*str1=='-'&amp;&amp;*str2=='-')<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(num1,num2+n);<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(num2,num1+n);<br /><span style="color: #008080; ">70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(*str1=='+'&amp;&amp;*str2=='-')<br /><span style="color: #008080; ">72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(num1+n,num2+n);<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(num2,num1);<br /><span style="color: #008080; ">75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br /><span style="color: #008080; ">77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(num1,num2);<br /><span style="color: #008080; ">79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(num2+n,num1+n);<br /><span style="color: #008080; ">80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(low,-1,<span style="color: #0000FF; ">sizeof</span>(low));<br /><span style="color: #008080; ">83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfn=sp=0;<br /><span style="color: #008080; ">84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i=0;i&lt;2*n&amp;&amp;flag;i++)<br /><span style="color: #008080; ">85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(low[i]==-1)<br /><span style="color: #008080; ">86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!dfs(i))&nbsp;flag=0;<br /><span style="color: #008080; ">87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",flag);<br /><span style="color: #008080; ">88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">90</span>&nbsp;}</div><img src ="http://www.cppblog.com/yzhw/aggbug/165796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yzhw/" target="_blank">yzhw</a> 2012-02-17 02:38 <a href="http://www.cppblog.com/yzhw/archive/2012/02/17/165796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku3904 容斥原理的运用，好题！</title><link>http://www.cppblog.com/yzhw/archive/2012/02/17/165795.html</link><dc:creator>yzhw</dc:creator><author>yzhw</author><pubDate>Thu, 16 Feb 2012 18:03:00 GMT</pubDate><guid>http://www.cppblog.com/yzhw/archive/2012/02/17/165795.html</guid><wfw:comment>http://www.cppblog.com/yzhw/comments/165795.html</wfw:comment><comments>http://www.cppblog.com/yzhw/archive/2012/02/17/165795.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yzhw/comments/commentRss/165795.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yzhw/services/trackbacks/165795.html</trackback:ping><description><![CDATA[解法发现网上一个大牛写的很好，就转载过来吧。可怜的我，开始没想到算法就算了，想到算法后又刻意依赖STL结果o(N)写成o(logN)成功葬送。<br /><fieldset><legend>解法</legend><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">题意：给你n个数，求GCD(gcd(a,b),gcd(c,d))=1的方案数，注意a,b,c,d并不一定两两互质，有多组数据</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">本来这个题的题解有一大把，但没有讲题解的只有贴代码的。</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">本来一直在做题，没有什么时间发题解，但这个题加深了我对容斥原理的理解，所以讲一下</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">这个题的算法是个伪多项式</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">首先，先将算法流程说一下，原理后面会有</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">Step 1：用筛法筛出10000内的素数表</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">Step 2：组合素数，用bool数组记录由m(m&lt;=5)个素数相乘所得数的m的奇偶</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">例如：182=2*7*13 &#8212;&#8212;&#8212;&gt; m=3 so，bool[182]=false</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2=2 &#8212;&#8212;&gt;m=1 so，bool[2]=false</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 91=7*13 &#8212;&#8212;&gt;m=2 so，bool[91]=true</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 注意12=2^2*3等这种是B=p1^k1*p2^k2+...这种有质因数指数不为一的合数不要处理因为不会用到</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">以上是预处理</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">Step 3：读入当前数为a，将a分解为质因数形式，注意每个质因数只被记录一次</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">例如：12=2*2*3 则 12会被分为2*3，多余的2被消去了</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">Step 4：将分出的素数进行组合，将组合出的a的约数的time+1</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">例如：12=2^2*3&#8212;&#8212;&gt;12=2*3&#8212;&#8212;&gt;time[2]++,time[3]++,time[6]++</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">Step 5：处理之后，ans赋值为C(n,4)即n*(n-1)*(n-2)*(n-3)div 24</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">Step 6：for i 2--&gt;10000</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if bool[i] then ans:=ans-C(time[i],4)</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else ans:=and+C(time[i],4);</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">Step 7：输出ans</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; "><br /></p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">原理：首先考虑一个问题，1000以内6,7,8,9的倍数有多少个？答案是</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">1000div6+1000div7+1000div8+1000div9</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">-1000div(6*7)-1000div(6*8)-1000div(6*9)-1000div(7*8)-1000div(7*9)-1000div(8*9)</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">+1000div(6*7*8)+1000div(6*8*9)+1000div(7*8*9)</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">-1000div(6*7*8*9)</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">这是容斥原理的一个最简单的应用，类比这道题，Step3到4其实将每个数a的不重复约数记录了下来，有公共约数的四个数的方案要从ans中减去，多减的要加上</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">显然m为奇时要减，m为偶时要加，这和&#8221;1000以内6,7,8,9的倍数有多少个？&#8220;这个问题奇偶是反的，由于a最大为10000，所以m最大可以有5 (2*3*5*7*11&lt;10000,2*3*5*7*11*13&gt;10000)</p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">至于12=2*2*3这种约数不处理因为可以分为2*6，而2和6会算一次，所以不须再算。</p></fieldset><br />代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#&nbsp;include&nbsp;&lt;cstdio&gt;<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#&nbsp;include&nbsp;&lt;map&gt;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#&nbsp;include&nbsp;&lt;cstring&gt;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#&nbsp;include&nbsp;&lt;algorithm&gt;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;pa[2000],pp=0,sa[10],sp=0;<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;refer[5][10001];<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;make_prime()<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;{<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;used[10001];<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(used,<span style="color: #0000FF; ">true</span>,<span style="color: #0000FF; ">sizeof</span>(used));<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=2;i&lt;=10000;i++)<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(used[i])<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pa[pp++]=i;<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=2*i;j&lt;=10000;j+=i)<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;used[j]=<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">19</span>&nbsp;}<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;spilt(<span style="color: #0000FF; ">int</span>&nbsp;n)<br /><span style="color: #008080; ">21</span>&nbsp;{<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp=0;<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;pp&amp;&amp;n!=1;i++)<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(n%pa[i]==0)<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sa[sp++]=pa[i];<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(n%pa[i]==0)<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n/=pa[i];<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">30</span>&nbsp;}<br /><span style="color: #008080; ">31</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;putmap(<span style="color: #0000FF; ">int</span>&nbsp;n)<br /><span style="color: #008080; ">32</span>&nbsp;{<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spilt(n);<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;(1&lt;&lt;sp);i++)<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n1=0,n2=1;<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=0;j&lt;5;j++)<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(i&amp;(1&lt;&lt;j))<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n1++,n2*=sa[j];<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refer[n1-1][n2]++;<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">42</span>&nbsp;}<br /><span style="color: #008080; ">43</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;c(<span style="color: #0000FF; ">int</span>&nbsp;n)<br /><span style="color: #008080; ">44</span>&nbsp;{<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(<span style="color: #0000FF; ">long</span>&nbsp;<span style="color: #0000FF; ">long</span>)n*(n-1)*(n-2)*(n-3)/4/3/2;<br /><span style="color: #008080; ">46</span>&nbsp;}<br /><span style="color: #008080; ">47</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;getans(<span style="color: #0000FF; ">int</span>&nbsp;n)<br /><span style="color: #008080; ">48</span>&nbsp;{<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;ans=c(n);<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;5;i++)<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;flag=<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=1;j&lt;=10000;j++)<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(refer[i][j]&gt;=4)<br /><span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag=<span style="color: #0000FF; ">true</span>,<br /><span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans+=c(refer[i][j])*(i%2?1ll:-1ll);<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!flag)<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;ans;<br /><span style="color: #008080; ">60</span>&nbsp;}<br /><span style="color: #008080; ">61</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()<br /><span style="color: #008080; ">62</span>&nbsp;{<br /><span style="color: #008080; ">63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<br /><span style="color: #008080; ">64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;make_prime();<br /><span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d",&amp;n)!=EOF)<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(refer,0,<span style="color: #0000FF; ">sizeof</span>(refer));<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;i++)<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t;<br /><span style="color: #008080; ">71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;t);<br /><span style="color: #008080; ">72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;putmap(t);<br /><span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%lld\n",getans(n));<br /><span style="color: #008080; ">75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">77</span>&nbsp;}</div><img src ="http://www.cppblog.com/yzhw/aggbug/165795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yzhw/" target="_blank">yzhw</a> 2012-02-17 02:03 <a href="http://www.cppblog.com/yzhw/archive/2012/02/17/165795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku3903 最长递增字串的单调性优化</title><link>http://www.cppblog.com/yzhw/archive/2012/02/09/165233.html</link><dc:creator>yzhw</dc:creator><author>yzhw</author><pubDate>Thu, 09 Feb 2012 11:33:00 GMT</pubDate><guid>http://www.cppblog.com/yzhw/archive/2012/02/09/165233.html</guid><wfw:comment>http://www.cppblog.com/yzhw/comments/165233.html</wfw:comment><comments>http://www.cppblog.com/yzhw/archive/2012/02/09/165233.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yzhw/comments/commentRss/165233.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yzhw/services/trackbacks/165233.html</trackback:ping><description><![CDATA[好久不动题目了，今天动了一题，忒背运，死都TLE，想了想，算法复杂度没问题啊，n=100000，nlogn的算法拼1S的RP咋崩溃的。。后来想起了无敌的POJ超级慢速set，无奈，不想改，到处搜有这题的OJ，TOJ上跑了下，10MS。。汗。。下载数据数据来看了看，就是12组，就是本地debug也不会TLE啊。。没办法。。<br />不发牢骚了，说说这题的方法吧。<br />一般的最长递增字串用n^2做很好做，就是dp[i]=max{dp[j]+1,height[j]&lt;height[i]}，这题可以用单调队列做优化，但是和普通的单调队列不同，要借助平衡树<br />首先，我们知道，要维护这样一个单调队列，当height[i]&lt;height[j]时，要有dp[i]&lt;dp[j]，否则的话，status{(j,height[j])}这个状态以后不会推得最优解，可以删除。这题麻烦就麻烦再height不是个单调的函数，随着i的增大（就是沿着DP方向计算）时，height不能保证也是递增的，木有办法，只能维护一个平衡树那样的东西。<br />那么更新过的DP方程就是<br />dp[i]=dp[j]+1,j为满足height[j]&lt;height[i]的最后一个元素<br />然后更新单调队列的策略是把当前决策加入单调队列里，然后往后删除dp[i]&gt;=dp[j]并且height[i]&lt;height[j]的statue{j}。<br />每个元素最多入队一次，出队一次，所以总得复杂度o(nlogn)<br />我是全部用set实现的，轻松好省<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#&nbsp;include&nbsp;&lt;cstdio&gt;<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#&nbsp;include&nbsp;&lt;<span style="color: #0000FF; ">set</span>&gt;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;node<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;height,id;<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;node(<span style="color: #0000FF; ">int</span>&nbsp;h,<span style="color: #0000FF; ">int</span>&nbsp;i):height(h),id(i){}<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;<span style="color: #0000FF; ">operator</span>&lt;(<span style="color: #0000FF; ">const</span>&nbsp;node&nbsp;&amp;pos)&nbsp;<span style="color: #0000FF; ">const</span><br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(height!=pos.height)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;height&lt;pos.height;<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;id&lt;pos.id;<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">13</span>&nbsp;};<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">set</span>&lt;node&gt;&nbsp;q;<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dp[100005];<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()<br /><span style="color: #008080; ">17</span>&nbsp;{<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d",&amp;n)!=EOF)<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q.clear();<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;i++)<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t;<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;t);<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">set</span>&lt;node&gt;::iterator&nbsp;it=q.lower_bound(node(t,-1));<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans;<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(it==q.begin())<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=1;<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=dp[(--it)-&gt;id]+1;<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it=q.lower_bound(node(t,-1));<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(it!=q.end()&amp;&amp;it-&gt;height==t)&nbsp;<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it=q.erase(it);<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(it!=q.end()&amp;&amp;dp[it-&gt;id]&lt;=ans)&nbsp;<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it=q.erase(it);<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q.insert(node(t,i));&nbsp;<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[i]=ans;<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",dp[q.rbegin()-&gt;id]);<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">43</span>&nbsp;}<br /><span style="color: #008080; ">44</span>&nbsp;</div><img src ="http://www.cppblog.com/yzhw/aggbug/165233.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yzhw/" target="_blank">yzhw</a> 2012-02-09 19:33 <a href="http://www.cppblog.com/yzhw/archive/2012/02/09/165233.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 3943 Digits on the Floor 并查集的活用（重点）+数字识别</title><link>http://www.cppblog.com/yzhw/archive/2012/01/14/164184.html</link><dc:creator>yzhw</dc:creator><author>yzhw</author><pubDate>Sat, 14 Jan 2012 11:57:00 GMT</pubDate><guid>http://www.cppblog.com/yzhw/archive/2012/01/14/164184.html</guid><wfw:comment>http://www.cppblog.com/yzhw/comments/164184.html</wfw:comment><comments>http://www.cppblog.com/yzhw/archive/2012/01/14/164184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yzhw/comments/commentRss/164184.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yzhw/services/trackbacks/164184.html</trackback:ping><description><![CDATA[题意很简单，给出一些线段，组成一些数字，保持数字连接点的联通关系不变（就说是图的逻辑结构不变吧），并且保证没有相交。要求识别数字。<br />首先这题，涉及到并查集的运用。开始犯了个很糊涂的错误，本题新加上一条线段可能造成2种情况<br />1、A - C，新加线为C，就是把C连接到某个树枝上<br />2、A-C-B，这种情况考虑漏了，就是通过C这个线把俩个不连通的集合给打通了<br />具体代码应该是这样<br />for(int j=0;j&lt;now;j++)<br />&nbsp; &nbsp; if(find(now)!=find(j)&amp;&amp;cross(now,j))<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set[find(now)]=find(j);<br />开始糊涂蛋的写成了<br />for(int j=0;j&lt;now;j++)<br />&nbsp; &nbsp; &nbsp; if(cross(now,j))<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;set[now]=find(j),break;<br />这个就是只考虑了第一种情况。<br /><br />关于数字识别的问题就好办多了，主要根据部分相交和点相交的数目以及联通集中线段的数目来判断数字（5和2还要根据叉积再来弄下），这题受益最深的就是并查集那里，容易犯的错误。<br /><br />代码如下：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;Source&nbsp;Code<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;Problem:&nbsp;3943&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User:&nbsp;yzhw<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;Memory:&nbsp;656K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Time:&nbsp;188MS<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;Language:&nbsp;G++&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:&nbsp;Accepted<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;Source&nbsp;Code<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;#&nbsp;include&nbsp;&lt;cstdio&gt;<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;#&nbsp;include&nbsp;&lt;vector&gt;<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;#&nbsp;include&nbsp;&lt;cstring&gt;<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;#&nbsp;include&nbsp;&lt;map&gt;<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;#&nbsp;define&nbsp;N&nbsp;1005<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;#&nbsp;define&nbsp;min(a,b)&nbsp;((a)&lt;(b)?(a):(b))<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;#&nbsp;define&nbsp;max(a,b)&nbsp;((a)&gt;(b)?(a):(b))<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;line<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x1,y1,x2,y2;<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;}l[N];<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;<span style="color: #0000FF; ">in</span>(<span style="color: #0000FF; ">int</span>&nbsp;x,<span style="color: #0000FF; ">int</span>&nbsp;y,<span style="color: #0000FF; ">const</span>&nbsp;line&nbsp;&amp;pos)<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(x&gt;=min(pos.x1,pos.x2)&amp;&amp;x&lt;=max(pos.x1,pos.x2)&amp;&amp;<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&gt;=min(pos.y1,pos.y2)&amp;&amp;y&lt;=max(pos.y1,pos.y2)&amp;&amp;<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pos.y2-pos.y1)*(pos.x2-x)==(pos.x2-pos.x1)*(pos.y2-y))<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cross(<span style="color: #0000FF; ">const</span>&nbsp;line&nbsp;&amp;a,<span style="color: #0000FF; ">const</span>&nbsp;line&nbsp;&amp;b)<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(a.x1==b.x1&amp;&amp;a.y1==b.y1||<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.x2==b.x1&amp;&amp;a.y2==b.y1||<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.x1==b.x2&amp;&amp;a.y1==b.y2||<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.x2==b.x2&amp;&amp;a.y2==b.y2)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(<span style="color: #0000FF; ">in</span>(a.x1,a.y1,b)||<span style="color: #0000FF; ">in</span>(a.x2,a.y2,b)||<span style="color: #0000FF; ">in</span>(b.x1,b.y1,a)||<span style="color: #0000FF; ">in</span>(b.x2,b.y2,a))&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;2;<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cross(<span style="color: #0000FF; ">int</span>&nbsp;x1,<span style="color: #0000FF; ">int</span>&nbsp;y1,<span style="color: #0000FF; ">int</span>&nbsp;x2,<span style="color: #0000FF; ">int</span>&nbsp;y2)<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;x1*y2-x2*y1;<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;node<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;line&gt;&nbsp;data;<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;type()&nbsp;<span style="color: #0000FF; ">const</span><br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;num[3]={0,0,0};<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;data.size();i++)<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=i+1;j&lt;data.size();j++)<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num[cross(data[i],data[j])]++;<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(num[1]==4&amp;&amp;num[2]==0)<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(data.size()==4)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;target=-1,x1,y1,x2,y2;<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;data.size();i++)<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;flag=<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=0;j&lt;data.size()&amp;&amp;flag;j++)<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(j!=i&amp;&amp;(data[i].x1==data[j].x1&amp;&amp;data[i].y1==data[j].y1||data[i].x1==data[j].x2&amp;&amp;data[i].y1==data[j].y2))<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag=<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(flag)<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target=i;<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x1=data[i].x2,y1=data[i].y2;<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x2=data[i].x1,y2=data[i].y1;<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag=<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=0;j&lt;data.size()&amp;&amp;flag;j++)<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(j!=i&amp;&amp;(data[i].x2==data[j].x1&amp;&amp;data[i].y2==data[j].y1||data[i].x2==data[j].x2&amp;&amp;data[i].y2==data[j].y2))<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag=<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(flag)<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target=i;<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x1=data[i].x1,y1=data[i].y1;<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x2=data[i].x2,y2=data[i].y2;<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;data.size();i++)<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(i!=target)<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(data[i].x1==x1&amp;&amp;data[i].y1==y1)<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;cross(data[i].x2-data[i].x1,data[i].y2-data[i].y1,x1-x2,y1-y2)&lt;0?5:2;<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(data[i].x2==x1&amp;&amp;data[i].y2==y1)<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;cross(data[i].x1-data[i].x2,data[i].y1-data[i].y2,x1-x2,y1-y2)&lt;0?5:2;<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("wa!\n");<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(<span style="color: #0000FF; ">true</span>);<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(num[1]==0&amp;&amp;num[2]==0)<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(num[1]==4&amp;&amp;num[2]==0)<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;2;<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(num[1]==2&amp;&amp;num[2]==1)<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;3;<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(num[1]==1&amp;&amp;num[2]==1)<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;4;<br /><span style="color: #008080; ">100</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(num[1]==4&amp;&amp;num[2]==1)<br /><span style="color: #008080; ">101</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;6;<br /><span style="color: #008080; ">102</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(num[1]==2&amp;&amp;num[2]==0)<br /><span style="color: #008080; ">103</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;7;<br /><span style="color: #008080; ">104</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(num[1]==4&amp;&amp;num[2]==2)<br /><span style="color: #008080; ">105</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;8;<br /><span style="color: #008080; ">106</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(num[1]==3&amp;&amp;num[2]==1)<br /><span style="color: #008080; ">107</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;9;<br /><span style="color: #008080; ">108</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">109</span>&nbsp;};<br /><span style="color: #008080; ">110</span>&nbsp;map&lt;<span style="color: #0000FF; ">int</span>,node&gt;&nbsp;data;<br /><span style="color: #008080; ">111</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,<span style="color: #0000FF; ">set</span>[N],ans[10];<br /><span style="color: #008080; ">112</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;find(<span style="color: #0000FF; ">int</span>&nbsp;pos)<br /><span style="color: #008080; ">113</span>&nbsp;{<br /><span style="color: #008080; ">114</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(<span style="color: #0000FF; ">set</span>[pos]==pos)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;pos;<br /><span style="color: #008080; ">115</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">set</span>[pos]=find(<span style="color: #0000FF; ">set</span>[pos]);<br /><span style="color: #008080; ">116</span>&nbsp;}<br /><span style="color: #008080; ">117</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()<br /><span style="color: #008080; ">118</span>&nbsp;{<br /><span style="color: #008080; ">119</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d",&amp;n)!=EOF&amp;&amp;n)<br /><span style="color: #008080; ">120</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">121</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data.clear();<br /><span style="color: #008080; ">122</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(ans,0,<span style="color: #0000FF; ">sizeof</span>(ans));<br /><span style="color: #008080; ">123</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;i++)<br /><span style="color: #008080; ">124</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">125</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">set</span>[i]=i;<br /><span style="color: #008080; ">126</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d%d",&amp;l[i].x1,&amp;l[i].y1,&amp;l[i].x2,&amp;l[i].y2);<br /><span style="color: #008080; ">127</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=0;j&lt;i;j++)<br /><span style="color: #008080; ">128</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(cross(l[i],l[j])&amp;&amp;find(i)!=find(j))<br /><span style="color: #008080; ">129</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">set</span>[find(i)]=find(j);<br /><span style="color: #008080; ">130</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">131</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;i++)<br /><span style="color: #008080; ">132</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[find(i)].data.push_back(l[i]);<br /><span style="color: #008080; ">133</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(map&lt;<span style="color: #0000FF; ">int</span>,node&gt;::iterator&nbsp;i=data.begin();i!=data.end();i++)<br /><span style="color: #008080; ">134</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans[i-&gt;second.type()]++;<br /><span style="color: #008080; ">135</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d",ans[0]);<br /><span style="color: #008080; ">136</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;10;i++)<br /><span style="color: #008080; ">137</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("&nbsp;%d",ans[i]);<br /><span style="color: #008080; ">138</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("\n");<br /><span style="color: #008080; ">139</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">140</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">141</span>&nbsp;}</div><img src ="http://www.cppblog.com/yzhw/aggbug/164184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yzhw/" target="_blank">yzhw</a> 2012-01-14 19:57 <a href="http://www.cppblog.com/yzhw/archive/2012/01/14/164184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 3998 Land Division DP斜率优化</title><link>http://www.cppblog.com/yzhw/archive/2011/10/18/158598.html</link><dc:creator>yzhw</dc:creator><author>yzhw</author><pubDate>Mon, 17 Oct 2011 18:17:00 GMT</pubDate><guid>http://www.cppblog.com/yzhw/archive/2011/10/18/158598.html</guid><wfw:comment>http://www.cppblog.com/yzhw/comments/158598.html</wfw:comment><comments>http://www.cppblog.com/yzhw/archive/2011/10/18/158598.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/yzhw/comments/commentRss/158598.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yzhw/services/trackbacks/158598.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 题意：n个点，用水平线或者竖直线划分成k条，要求平均差最小，平均差为每条中点的个数减去n/k的绝对值。解法：首先一看就是个DP，与处理不说了，用水平扫描线、竖直扫描线将同一直线上的点压缩成一个带权值的点，然后DP这题重要的是DP降维观察DP方程dp[i]=min{dp[j]+|sum[i]-sum[j]-average|}这里就要分成两部分讨论1、当sum[i]-sum[j]&gt;average...&nbsp;&nbsp;<a href='http://www.cppblog.com/yzhw/archive/2011/10/18/158598.html'>阅读全文</a><img src ="http://www.cppblog.com/yzhw/aggbug/158598.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yzhw/" target="_blank">yzhw</a> 2011-10-18 02:17 <a href="http://www.cppblog.com/yzhw/archive/2011/10/18/158598.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU 3682 To Be an Dream Architect 容斥原理</title><link>http://www.cppblog.com/yzhw/archive/2011/10/03/157376.html</link><dc:creator>yzhw</dc:creator><author>yzhw</author><pubDate>Sun, 02 Oct 2011 16:06:00 GMT</pubDate><guid>http://www.cppblog.com/yzhw/archive/2011/10/03/157376.html</guid><wfw:comment>http://www.cppblog.com/yzhw/comments/157376.html</wfw:comment><comments>http://www.cppblog.com/yzhw/archive/2011/10/03/157376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yzhw/comments/commentRss/157376.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yzhw/services/trackbacks/157376.html</trackback:ping><description><![CDATA[题意；<br />每次可以删除一个木条x=?,y=?或者x=?,z=?或者y=?,z=?，求最后删除的木块总数<br />：<img src="http://acm.hdu.edu.cn/data/images/3682-1.gif" alt="" /><br />开始写的时候出现个BUG，无奈，上网找题解，更无奈，都是些几句话hash然后就是一堆难懂的代码。。<br />后来仔细想了想，把重复的操作去除后（就是两次删除的同一个木条），下面就是个很简单的容斥原理了<br />因为去除了重复操作，一个木块最多被删除3次，然后删除的个数就为被删除至少一次的个数-删除至少两次的个数+删除至少3次的个数。不能强行枚举，可以用map或者传说中的hash记录被删除掉木块的次数。这里，由于操作最多m=1000，删除木块数最多为C(m,2)，然后两两枚举操作，把相交木块删除次数+1，然后最后map中所有木块删除次数只能有2个值：1和3，当值为1时，total-1,值为3时，total-2<br />为什么？因为我说了，一个木块最多被删除3次，然后俩俩枚举的时候，你懂的。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">#&nbsp;include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cstdio</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">#&nbsp;include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">utility</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">#&nbsp;include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cstring</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">#&nbsp;include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">algorithm</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">#&nbsp;include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">functional</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">#&nbsp;include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">set</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">#&nbsp;include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cstdlib</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">#&nbsp;include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">map</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;node<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;p[</span><span style="color: #000000; ">3</span><span style="color: #000000; ">];<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">operator</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;node&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">pos)&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(p[i]</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">pos.p[i])&nbsp;<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;p[i]</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">pos.p[i];<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">};<br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">pair</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;data[</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">][</span><span style="color: #000000; ">2</span><span style="color: #000000; ">];<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">set</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">pair</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">pair</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">,pair</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;r1;<br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">map</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">node,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;r2;<br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;test;<br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">test);<br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(test</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,m,p</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;str[</span><span style="color: #000000; ">128</span><span style="color: #000000; ">];<br /></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m);<br /></span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1.clear();r2.clear();<br /></span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(m</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%s</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,str);<br /></span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">t</span><span style="color: #000000; ">=</span><span style="color: #000000; ">strtok(str,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">38</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[p][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">].first</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">t)</span><span style="color: #000000; ">-</span><span style="color: #000000; ">'</span><span style="color: #000000; ">X</span><span style="color: #000000; ">'</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">39</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[p][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">].second</span><span style="color: #000000; ">=</span><span style="color: #000000; ">atoi(t</span><span style="color: #000000; ">+</span><span style="color: #000000; ">2</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">40</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t</span><span style="color: #000000; ">=</span><span style="color: #000000; ">strtok(NULL,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">41</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[p][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].first</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">t)</span><span style="color: #000000; ">-</span><span style="color: #000000; ">'</span><span style="color: #000000; ">X</span><span style="color: #000000; ">'</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[p][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].second</span><span style="color: #000000; ">=</span><span style="color: #000000; ">atoi(t</span><span style="color: #000000; ">+</span><span style="color: #000000; ">2</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">43</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(data[p][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">].first</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">data[p][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].first)&nbsp;swap(data[p][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">],data[p][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]);<br /></span><span style="color: #008080; ">44</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pair</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;pair</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">,pair</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;tt;<br /></span><span style="color: #008080; ">45</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tt.first</span><span style="color: #000000; ">=</span><span style="color: #000000; ">data[p][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">];<br /></span><span style="color: #008080; ">46</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tt.second</span><span style="color: #000000; ">=</span><span style="color: #000000; ">data[p][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br /></span><span style="color: #008080; ">47</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(data[p][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">].second</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">data[p][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">].second</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">data[p][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].second</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">data[p][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].second</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">r1.find(tt)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">r1.end())&nbsp;p</span><span style="color: #000000; ">++</span><span style="color: #000000; ">,r1.insert(tt);<br /></span><span style="color: #008080; ">48</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">49</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m</span><span style="color: #000000; ">=</span><span style="color: #000000; ">p;<br /></span><span style="color: #008080; ">50</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">m;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">51</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;j</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">m;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">52</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(data[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">data[j][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">data[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].first</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">data[j][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].first</span><span style="color: #000000; ">||</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">53</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">data[j][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">data[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">].first</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">data[j][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].first</span><span style="color: #000000; ">||</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">54</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">data[j][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">data[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].first</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">data[j][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">].first</span><span style="color: #000000; ">||</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">55</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">data[j][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">data[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">].first</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">data[j][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">].first)<br /></span><span style="color: #008080; ">56</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080; ">57</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node&nbsp;t;<br /></span><span style="color: #008080; ">58</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.p[data[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">].first]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">data[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">].second;<br /></span><span style="color: #008080; ">59</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.p[data[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].first]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">data[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].second;<br /></span><span style="color: #008080; ">60</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.p[data[j][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">].first]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">data[j][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">].second;<br /></span><span style="color: #008080; ">61</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.p[data[j][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].first]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">data[j][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].second;<br /></span><span style="color: #008080; ">62</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2[t]</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">63</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">64</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;total</span><span style="color: #000000; ">=</span><span style="color: #000000; ">m</span><span style="color: #000000; ">*</span><span style="color: #000000; ">n;<br /></span><span style="color: #008080; ">65</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(map</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">node,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">::iterator&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">r2.begin();i</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">r2.end();i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">66</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(i</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">second</span><span style="color: #000000; ">==</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;total</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">67</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;total</span><span style="color: #000000; ">-=</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">68</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,total);<br /></span><span style="color: #008080; ">69</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">70</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">system("pause");</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">71</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">72</span>&nbsp;<span style="color: #000000; ">}&nbsp;<br /></span><span style="color: #008080; ">73</span>&nbsp;<span style="color: #000000; "></span></div><img src ="http://www.cppblog.com/yzhw/aggbug/157376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yzhw/" target="_blank">yzhw</a> 2011-10-03 00:06 <a href="http://www.cppblog.com/yzhw/archive/2011/10/03/157376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2010 天津赛区G hdu 3726 splay </title><link>http://www.cppblog.com/yzhw/archive/2011/09/30/157191.html</link><dc:creator>yzhw</dc:creator><author>yzhw</author><pubDate>Fri, 30 Sep 2011 00:51:00 GMT</pubDate><guid>http://www.cppblog.com/yzhw/archive/2011/09/30/157191.html</guid><wfw:comment>http://www.cppblog.com/yzhw/comments/157191.html</wfw:comment><comments>http://www.cppblog.com/yzhw/archive/2011/09/30/157191.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yzhw/comments/commentRss/157191.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yzhw/services/trackbacks/157191.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 哎，一道裸splay的题目，网上竟然木有解题报告。我第一次写splay，犯了很多很多NC的错误。。调了有一个下午，最后写了个测试模块+生成了随机数据，才发现错误。说说我的失误吧。。1、首先zig zag实现的时候一定要配对，不能乱，加个儿子节点就要把儿子节点的父亲节点同时初始化好2、新加入节点的size域及其祖先的size域名不用调整，会在splay过程中自动修正完毕3、千万别要试图将一颗子树的根...&nbsp;&nbsp;<a href='http://www.cppblog.com/yzhw/archive/2011/09/30/157191.html'>阅读全文</a><img src ="http://www.cppblog.com/yzhw/aggbug/157191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yzhw/" target="_blank">yzhw</a> 2011-09-30 08:51 <a href="http://www.cppblog.com/yzhw/archive/2011/09/30/157191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2010 ICPC天津赛区 J hdu 3727 划分树的理解</title><link>http://www.cppblog.com/yzhw/archive/2011/09/30/157189.html</link><dc:creator>yzhw</dc:creator><author>yzhw</author><pubDate>Fri, 30 Sep 2011 00:44:00 GMT</pubDate><guid>http://www.cppblog.com/yzhw/archive/2011/09/30/157189.html</guid><wfw:comment>http://www.cppblog.com/yzhw/comments/157189.html</wfw:comment><comments>http://www.cppblog.com/yzhw/archive/2011/09/30/157189.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yzhw/comments/commentRss/157189.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yzhw/services/trackbacks/157189.html</trackback:ping><description><![CDATA[很久不写划分树了，果然各种NC错误<br />按照我的理解，划分树即一个线段树（用来确定数组下标和层次）以及一个log2(n)*n的数组，来记录划分信息<br />这题实现4个操作：<br />1、插入<br />按照划分树的定义，如果小于有序表中中间节点的值，就递归插入左子树，否则递归插入右子树。更新当前区间段的划分信息（无非就是往后计算一个）<br />2、询问s,e区间第k小数<br />查询s,e区间里面划分到左子树的个数i，如果i&gt;=k，那么显然递归到左子树查询，否则就是递归到右子树查询k-i小的数。注意！这里要重新定位左子树和右子树中的区间，由于是闭区间，那么做端点为s+sum(s-1),右端点为s+sum(e)-1，这个减一丢了。。调了我半天。。哎。。以前写都是左闭右开区间的，结果习惯了。。<br />3、查询值为k的数的位次<br />这个需要一个辅助数组，记录值为k的数插在最顶层区间的哪个位置了。这个办好后，就容易了，如果数被划分到了左子树，那么递归查询左子树，否则返回递归查询右子树的值加上当前区间被划分到左子树的个数<br />4、查询rank k的数<br />同样是这样，如果当前区间被划分到左子树的个数小于等于k，那么递归查询左子树，否则递归查询右子树中rank为k-左子树的size。<br />大概思想就是这样了，实现有很多细节，比如说假设p==区间左端点（左区间木有数），那么算sum(p-1)的时候就要特判下了。我喜欢用三元式，很方便。<br /><br />代码<br /><font color="#0000ff"># include &lt;cstdio&gt;<br /># include &lt;cstring&gt;<br /># include &lt;map&gt;<br /><strong>using namespace</strong></font> std<strong><font color="#ff00ff">;</font></strong><font color="blue"><br /># define N 100005<br /></font><strong><font color="blue">int</font></strong> arr<strong><font color="#ff00ff">[</font></strong><font color="#cc3300">20</font><strong><font color="#ff00ff">][</font></strong>N<strong><font color="#ff00ff">];</font></strong><strong><font color="#0000ff"><br />struct</font></strong> node<strong><font color="#ff00ff"><br />{</font></strong><strong><font color="blue"><br />&nbsp;&nbsp; int</font></strong> s<strong><font color="#ff00ff">,</font></strong>e<strong><font color="#ff00ff">,</font></strong>layer<strong><font color="#ff00ff">;</font></strong><strong><font color="blue"><br />&nbsp;&nbsp; int</font></strong> c<strong><font color="#ff00ff">;<br />}</font></strong>st<strong><font color="#ff00ff">[</font></strong><font color="#cc3300">4</font><strong><font color="#ff00ff">*</font></strong>N<strong><font color="#ff00ff">];</font></strong><strong><font color="blue"><br />int</font></strong> q<strong><font color="#ff00ff">[</font></strong><font color="#cc3300">500000</font><strong><font color="#ff00ff">][</font></strong><font color="#cc3300">4</font><strong><font color="#ff00ff">],</font></strong>c<strong><font color="#ff00ff">;</font></strong><strong><font color="blue"><br />int</font></strong> remap<strong><font color="#ff00ff">[</font></strong>N<strong><font color="#ff00ff">],</font></strong>position<strong><font color="#ff00ff">[</font></strong>N<strong><font color="#ff00ff">];</font></strong><br />map<strong><font color="#ff00ff">&lt;</font></strong><strong><font color="blue">int</font></strong><strong><font color="#ff00ff">,</font></strong><strong><font color="blue">int</font></strong><strong><font color="#ff00ff">&gt;</font></strong> refer<strong><font color="#ff00ff">;</font></strong><strong><font color="blue"><br />void</font></strong> init<strong><font color="#ff00ff">(</font></strong><strong><font color="blue">int</font></strong> s<strong><font color="#ff00ff">,</font></strong><strong><font color="blue">int</font></strong> e<strong><font color="#ff00ff">,</font></strong><strong><font color="blue">int</font></strong> layer<strong><font color="#ff00ff">,</font></strong><strong><font color="blue">int</font></strong> pos<strong><font color="#ff00ff">=</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">)<br />{</font></strong><br />&nbsp;&nbsp;&nbsp; st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">=</font></strong>s<strong><font color="#ff00ff">;</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>e<strong><font color="#ff00ff">=</font></strong>e<strong><font color="#ff00ff">;</font></strong><br />&nbsp;&nbsp;&nbsp; st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">=</font></strong>layer<strong><font color="#ff00ff">;</font></strong><br />&nbsp;&nbsp;&nbsp; st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>c<strong><font color="#ff00ff">=</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">;</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp; if</font></strong><strong><font color="#ff00ff">(</font></strong>s<strong><font color="#ff00ff">!=</font></strong>e<strong><font color="#ff00ff">)</font></strong> init<strong><font color="#ff00ff">(</font></strong>s<strong><font color="#ff00ff">,(</font></strong>s<strong><font color="#ff00ff">+</font></strong>e<strong><font color="#ff00ff">)/</font></strong><font color="#cc3300">2</font><strong><font color="#ff00ff">,</font></strong>layer<strong><font color="#ff00ff">+</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">,</font></strong>pos<strong><font color="#ff00ff">&lt;&lt;</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">),</font></strong>init<strong><font color="#ff00ff">((</font></strong>s<strong><font color="#ff00ff">+</font></strong>e<strong><font color="#ff00ff">)/</font></strong><font color="#cc3300">2</font><strong><font color="#ff00ff">+</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">,</font></strong>e<strong><font color="#ff00ff">,</font></strong>layer<strong><font color="#ff00ff">+</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">,(</font></strong>pos<strong><font color="#ff00ff">&lt;&lt;</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">)+</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">);<br />}</font></strong><strong><font color="blue"><br />void</font></strong> insert<strong><font color="#ff00ff">(</font></strong><strong><font color="blue">int</font></strong> value<strong><font color="#ff00ff">,</font></strong><strong><font color="blue">int</font></strong> pos<strong><font color="#ff00ff">=</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">)<br />{</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp; if</font></strong><strong><font color="#ff00ff">(</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">==</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>e<strong><font color="#ff00ff">)</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>c<strong><font color="#ff00ff">++]=</font></strong>value<strong><font color="#ff00ff">;</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp; else</font></strong><strong><font color="#ff00ff"><br />&nbsp;&nbsp;&nbsp;&nbsp; {</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if</font></strong><strong><font color="#ff00ff">(</font></strong>value<strong><font color="#ff00ff">&lt;=(</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">+</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>e<strong><font color="#ff00ff">)/</font></strong><font color="#cc3300">2</font><strong><font color="#ff00ff">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>c<strong><font color="#ff00ff">]=(</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>c<strong><font color="#ff00ff">==</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">?</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">:</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>c<strong><font color="#ff00ff">-</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">])+</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">;</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>c<strong><font color="#ff00ff">++;</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insert<strong><font color="#ff00ff">(</font></strong>value<strong><font color="#ff00ff">,</font></strong>pos<strong><font color="#ff00ff">&lt;&lt;</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</font></strong><strong><font color="#ff00ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>c<strong><font color="#ff00ff">]=(</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>c<strong><font color="#ff00ff">==</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">?</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">:</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>c<strong><font color="#ff00ff">-</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">]);</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>c<strong><font color="#ff00ff">++;</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insert<strong><font color="#ff00ff">(</font></strong>value<strong><font color="#ff00ff">,(</font></strong>pos<strong><font color="#ff00ff">&lt;&lt;</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">)+</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />}</font></strong><strong><font color="blue"><br />int</font></strong> q1<strong><font color="#ff00ff">(</font></strong><strong><font color="blue">int</font></strong> s<strong><font color="#ff00ff">,</font></strong><strong><font color="blue">int</font></strong> t<strong><font color="#ff00ff">,</font></strong><strong><font color="blue">int</font></strong> k<strong><font color="#ff00ff">,</font></strong><strong><font color="blue">int</font></strong> pos<strong><font color="#ff00ff">=</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">)<br />{</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp; if</font></strong><strong><font color="#ff00ff">(</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">==</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>e<strong><font color="#ff00ff">)</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return</font></strong>&nbsp; remap<strong><font color="#ff00ff">[</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">]];</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp; else</font></strong><strong><font color="#ff00ff"><br />&nbsp;&nbsp;&nbsp; {</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if</font></strong><strong><font color="#ff00ff">(</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>t<strong><font color="#ff00ff">]-(</font></strong>s<strong><font color="#ff00ff">==</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">?</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">:</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>s<strong><font color="#ff00ff">-</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">])&gt;=</font></strong>k<strong><font color="#ff00ff">)</font></strong><font color="green">//left<br /></font><strong><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return</font></strong> q1<strong><font color="#ff00ff">(</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">+(</font></strong>s<strong><font color="#ff00ff">==</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">?</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">:</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>s<strong><font color="#ff00ff">-</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">]),</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">+</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>t<strong><font color="#ff00ff">]-</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">,</font></strong>k<strong><font color="#ff00ff">,</font></strong>pos<strong><font color="#ff00ff">&lt;&lt;</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">);</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</font></strong><font color="green">//right<br /></font><strong><font color="#ff00ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k<strong><font color="#ff00ff">-=</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>t<strong><font color="#ff00ff">]-(</font></strong>s<strong><font color="#ff00ff">==</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">?</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">:</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>s<strong><font color="#ff00ff">-</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">]);</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return</font></strong> q1<strong><font color="#ff00ff">((</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">+</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>e<strong><font color="#ff00ff">)/</font></strong><font color="#cc3300">2</font><strong><font color="#ff00ff">+</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">+</font></strong>s<strong><font color="#ff00ff">-</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">-</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">+</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">-(</font></strong>s<strong><font color="#ff00ff">==</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">?</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">:</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>s<strong><font color="#ff00ff">-</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">]),(</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">+</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>e<strong><font color="#ff00ff">)/</font></strong><font color="#cc3300">2</font><strong><font color="#ff00ff">+</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">+</font></strong>t<strong><font color="#ff00ff">-</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">+</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">-</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>t<strong><font color="#ff00ff">]-</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">,</font></strong>k<strong><font color="#ff00ff">,(</font></strong>pos<strong><font color="#ff00ff">&lt;&lt;</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">)+</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />}</font></strong><strong><font color="blue"><br />int</font></strong> q2<strong><font color="#ff00ff">(</font></strong><strong><font color="blue">int</font></strong> s<strong><font color="#ff00ff">,</font></strong><strong><font color="blue">int</font></strong> pos<strong><font color="#ff00ff">=</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">)<br />{</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp; if</font></strong><strong><font color="#ff00ff">(</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">==</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>e<strong><font color="#ff00ff">)</font></strong><strong><font color="#0000ff"> return</font></strong><font color="#cc3300"> 1</font><strong><font color="#ff00ff">;</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp; else if</font></strong><strong><font color="#ff00ff">(</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>s<strong><font color="#ff00ff">]-(</font></strong>s<strong><font color="#ff00ff">==</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">?</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">:</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>s<strong><font color="#ff00ff">-</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">]))</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return</font></strong> q2<strong><font color="#ff00ff">(</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">+</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>s<strong><font color="#ff00ff">]-</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">,</font></strong>pos<strong><font color="#ff00ff">&lt;&lt;</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">);</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return</font></strong><strong><font color="#ff00ff"> (</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>c<strong><font color="#ff00ff">==</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">?</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">:</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>c<strong><font color="#ff00ff">-</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">])+</font></strong>q2<strong><font color="#ff00ff">((</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">+</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>e<strong><font color="#ff00ff">)/</font></strong><font color="#cc3300">2</font><strong><font color="#ff00ff">+</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">+</font></strong>s<strong><font color="#ff00ff">-</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">+</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">-</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>s<strong><font color="#ff00ff">]-</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">,(</font></strong>pos<strong><font color="#ff00ff">&lt;&lt;</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">)+</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">);<br />}</font></strong><strong><font color="blue"><br />int</font></strong> q3<strong><font color="#ff00ff">(</font></strong><strong><font color="blue">int</font></strong> k<strong><font color="#ff00ff">,</font></strong><strong><font color="blue">int</font></strong> pos<strong><font color="#ff00ff">=</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">)<br />{</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp; if</font></strong><strong><font color="#ff00ff">(</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">==</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>e<strong><font color="#ff00ff">)</font></strong><strong><font color="#0000ff"> return</font></strong> remap<strong><font color="#ff00ff">[</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">]];</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp; else if</font></strong><strong><font color="#ff00ff">(</font></strong>k<strong><font color="#ff00ff">&lt;=(</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>c<strong><font color="#ff00ff">==</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">?</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">:</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>c<strong><font color="#ff00ff">-</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">]))</font></strong><strong><font color="#0000ff"> return</font></strong> q3<strong><font color="#ff00ff">(</font></strong>k<strong><font color="#ff00ff">,</font></strong>pos<strong><font color="#ff00ff">&lt;&lt;</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">);</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp; else return</font></strong> q3<strong><font color="#ff00ff">(</font></strong>k<strong><font color="#ff00ff">-(</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>s<strong><font color="#ff00ff">==</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>c<strong><font color="#ff00ff">?</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">:</font></strong>arr<strong><font color="#ff00ff">[</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>layer<strong><font color="#ff00ff">][</font></strong>st<strong><font color="#ff00ff">[</font></strong>pos<strong><font color="#ff00ff">].</font></strong>c<strong><font color="#ff00ff">-</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">]),(</font></strong>pos<strong><font color="#ff00ff">&lt;&lt;</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">)+</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">);<br />}</font></strong><strong><font color="blue"><br />int</font></strong><strong><font color="#0000ff"> main</font></strong><strong><font color="#ff00ff">()<br />{</font></strong><strong><font color="blue"><br />&nbsp;&nbsp;&nbsp; int</font></strong> n<strong><font color="#ff00ff">,</font></strong>test<strong><font color="#ff00ff">=</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">;</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp; while</font></strong><strong><font color="#ff00ff">(</font></strong>scanf<strong><font color="#ff00ff">(</font></strong><font color="green">"%d"</font><strong><font color="#ff00ff">,&amp;</font></strong>n<strong><font color="#ff00ff">)!=</font></strong>EOF<strong><font color="#ff00ff">)<br />&nbsp;&nbsp;&nbsp; {</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; refer<strong><font color="#ff00ff">.</font></strong>clear<strong><font color="#ff00ff">();</font></strong>c<strong><font color="#ff00ff">=</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">;</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memset<strong><font color="#ff00ff">(</font></strong>arr<strong><font color="#ff00ff">,</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">,</font></strong><strong><font color="#0000ff">sizeof</font></strong><strong><font color="#ff00ff">(</font></strong>arr<strong><font color="#ff00ff">));</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for</font></strong><strong><font color="#ff00ff">(</font></strong><strong><font color="blue">int</font></strong> i<strong><font color="#ff00ff">=</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">;</font></strong>i<strong><font color="#ff00ff">&lt;</font></strong>n<strong><font color="#ff00ff">;</font></strong>i<strong><font color="#ff00ff">++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></strong><strong><font color="blue"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char</font></strong> tmp<strong><font color="#ff00ff">[</font></strong><font color="#cc3300">12</font><strong><font color="#ff00ff">];</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf<strong><font color="#ff00ff">(</font></strong><font color="green">"%s"</font><strong><font color="#ff00ff">,</font></strong>tmp<strong><font color="#ff00ff">);</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if</font></strong><strong><font color="#ff00ff">(*</font></strong>tmp<strong><font color="#ff00ff">==</font></strong><font color="green">'I'</font><strong><font color="#ff00ff">)</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">]=</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">;</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</font></strong> q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">]=</font></strong>tmp<strong><font color="#ff00ff">[</font></strong><font color="#cc3300">6</font><strong><font color="#ff00ff">]-</font></strong><font color="#cc3300">48</font><strong><font color="#ff00ff">;</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch</font></strong><strong><font color="#ff00ff">(</font></strong>q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case</font></strong><font color="#cc3300"> 0</font><strong><font color="#ff00ff">:</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf<strong><font color="#ff00ff">(</font></strong><font color="green">"%d"</font><strong><font color="#ff00ff">,&amp;</font></strong>q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">]);</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; refer<strong><font color="#ff00ff">[</font></strong>q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">]]=</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">;</font></strong><strong><font color="#0000ff"> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break</font></strong><strong><font color="#ff00ff">;</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case</font></strong><font color="#cc3300"> 1</font><strong><font color="#ff00ff">:</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf<strong><font color="#ff00ff">(</font></strong><font color="green">"%d%d%d"</font><strong><font color="#ff00ff">,&amp;</font></strong>q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">],&amp;</font></strong>q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">2</font><strong><font color="#ff00ff">],&amp;</font></strong>q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">3</font><strong><font color="#ff00ff">]);</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break</font></strong><strong><font color="#ff00ff">;</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default</font></strong><strong><font color="#ff00ff">:</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf<strong><font color="#ff00ff">(</font></strong><font color="green">"%d"</font><strong><font color="#ff00ff">,&amp;</font></strong>q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">]);</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break</font></strong><strong><font color="#ff00ff">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for</font></strong><strong><font color="#ff00ff">(</font></strong>map<strong><font color="#ff00ff">&lt;</font></strong><strong><font color="blue">int</font></strong><strong><font color="#ff00ff">,</font></strong><strong><font color="blue">int</font></strong><strong><font color="#ff00ff">&gt;::</font></strong>iterator i<strong><font color="#ff00ff">=</font></strong>refer<strong><font color="#ff00ff">.</font></strong>begin<strong><font color="#ff00ff">();</font></strong>i<strong><font color="#ff00ff">!=</font></strong>refer<strong><font color="#ff00ff">.</font></strong>end<strong><font color="#ff00ff">();</font></strong>i<strong><font color="#ff00ff">++)</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; remap<strong><font color="#ff00ff">[</font></strong>c<strong><font color="#ff00ff">]=</font></strong>i<strong><font color="#ff00ff">-&gt;</font></strong>first<strong><font color="#ff00ff">,</font></strong>i<strong><font color="#ff00ff">-&gt;</font></strong>second<strong><font color="#ff00ff">=</font></strong>c<strong><font color="#ff00ff">++;</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; init<strong><font color="#ff00ff">(</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">,</font></strong>c<strong><font color="#ff00ff">-</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">,</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">);</font></strong><strong><font color="blue"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long long</font></strong> t<strong><font color="#ff00ff">[</font></strong><font color="#cc3300">4</font><strong><font color="#ff00ff">]={</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">,</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">,</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">,</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">};</font></strong><strong><font color="blue"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int</font></strong> now<strong><font color="#ff00ff">=</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">;</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for</font></strong><strong><font color="#ff00ff">(</font></strong><strong><font color="blue">int</font></strong> i<strong><font color="#ff00ff">=</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">;</font></strong>i<strong><font color="#ff00ff">&lt;</font></strong>n<strong><font color="#ff00ff">;</font></strong>i<strong><font color="#ff00ff">++)</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch</font></strong><strong><font color="#ff00ff">(</font></strong>q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case</font></strong><font color="#cc3300"> 0</font><strong><font color="#ff00ff">:</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insert<strong><font color="#ff00ff">(</font></strong>refer<strong><font color="#ff00ff">[</font></strong>q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">]]);</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; position<strong><font color="#ff00ff">[</font></strong>refer<strong><font color="#ff00ff">[</font></strong>q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">]]]=</font></strong>now<strong><font color="#ff00ff">++;</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break</font></strong><strong><font color="#ff00ff">;</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case</font></strong><font color="#cc3300"> 1</font><strong><font color="#ff00ff">:</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t<strong><font color="#ff00ff">[</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">]+=</font></strong>q1<strong><font color="#ff00ff">(</font></strong>q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">],</font></strong>q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">2</font><strong><font color="#ff00ff">],</font></strong>q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">3</font><strong><font color="#ff00ff">]);</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break</font></strong><strong><font color="#ff00ff">;</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case</font></strong><font color="#cc3300"> 2</font><strong><font color="#ff00ff">:</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t<strong><font color="#ff00ff">[</font></strong><font color="#cc3300">2</font><strong><font color="#ff00ff">]+=</font></strong>q2<strong><font color="#ff00ff">(</font></strong>position<strong><font color="#ff00ff">[</font></strong>refer<strong><font color="#ff00ff">[</font></strong>q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">]]]);</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break</font></strong><strong><font color="#ff00ff">;</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case</font></strong><font color="#cc3300"> 3</font><strong><font color="#ff00ff">:</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t<strong><font color="#ff00ff">[</font></strong><font color="#cc3300">3</font><strong><font color="#ff00ff">]+=</font></strong>q3<strong><font color="#ff00ff">(</font></strong>q<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">][</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">]);</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break</font></strong><strong><font color="#ff00ff">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf<strong><font color="#ff00ff">(</font></strong><font color="green">"Case %d:\n%I64d\n%I64d\n%I64d\n"</font><strong><font color="#ff00ff">,</font></strong>test<strong><font color="#ff00ff">++,</font></strong>t<strong><font color="#ff00ff">[</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">],</font></strong>t<strong><font color="#ff00ff">[</font></strong><font color="#cc3300">2</font><strong><font color="#ff00ff">],</font></strong>t<strong><font color="#ff00ff">[</font></strong><font color="#cc3300">3</font><strong><font color="#ff00ff">]);<br />&nbsp;&nbsp;&nbsp; }</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp; return</font></strong><font color="#cc3300"> 0</font><strong><font color="#ff00ff">;<br />}</font></strong><br /><img src ="http://www.cppblog.com/yzhw/aggbug/157189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yzhw/" target="_blank">yzhw</a> 2011-09-30 08:44 <a href="http://www.cppblog.com/yzhw/archive/2011/09/30/157189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>