﻿<?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++博客-ArcTan-文章分类-ACM-数据结构</title><link>http://www.cppblog.com/ArcTan/category/19189.html</link><description>dfs</description><language>zh-cn</language><lastBuildDate>Fri, 11 Jan 2013 21:37:45 GMT</lastBuildDate><pubDate>Fri, 11 Jan 2013 21:37:45 GMT</pubDate><ttl>60</ttl><item><title>二维线段树-子矩阵和</title><link>http://www.cppblog.com/ArcTan/articles/196862.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Sun, 30 Dec 2012 13:11:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/196862.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/196862.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/196862.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/196862.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/196862.html</trackback:ping><description><![CDATA[无聊中，写了个二维线段树。<br /><br />N*N的矩阵里，两种种操作<br />A x y w，a[x][y]加上w<br />S x1 y1 x2 y2，(x1,y1)到(x2,y2)这个小矩阵里所有数的和<br /><br />二维线段树:一维对x二分，每个节点也是一个线段树，对y二分。<br /><br /><div><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 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: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;node{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;l,r,m;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;sum;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;num;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;pos;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">treeX里每个节点的线段树在treeY里的位置</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">}treeX[maxn</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">],treeY[maxn</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">][maxn</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;N;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a[maxn][maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;s[maxn][maxn];</span><span style="color: #008000; ">//</span><span style="color: #008000; ">s[i][j]表示（1，1）到(i,j)子矩阵的和</span></div></div><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 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: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;buildY(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cnt,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;ll,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;rr,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;root,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;l,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;r)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;treeY[cnt][root].l&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;l;<br />&nbsp;&nbsp;&nbsp;&nbsp;treeY[cnt][root].r&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;r;<br />&nbsp;&nbsp;&nbsp;&nbsp;treeY[cnt][root].sum&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;s[rr][r]</span><span style="color: #000000; ">-</span><span style="color: #000000; ">s[rr][l</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">-</span><span style="color: #000000; ">s[ll</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][r]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">s[ll</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][l</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(l</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">r)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildY(cnt,ll,rr,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root,l,(l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">r)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildY(cnt,ll,rr,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,(l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">r)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,r);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;;<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;buildX(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cnt,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;root,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;l,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;r)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;buildY(cnt,l,r,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,N);<br />&nbsp;&nbsp;&nbsp;&nbsp;treeX[root].l&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;l;<br />&nbsp;&nbsp;&nbsp;&nbsp;treeX[root].r&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;r;<br />&nbsp;&nbsp;&nbsp;&nbsp;treeX[root].sum&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;s[r][N]</span><span style="color: #000000; ">-</span><span style="color: #000000; ">s[l</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][N];<br />&nbsp;&nbsp;&nbsp;&nbsp;treeX[root].pos&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(l</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">r)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildX(cnt</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root,l,(l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">r)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildX(cnt</span><span style="color: #000000; ">+</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,(l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">r)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,r);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;searchY(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cnt,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;root,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;l,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;r)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(l</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">treeY[cnt][root].l&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;r</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">treeY[cnt][root].r)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;treeY[cnt][root].sum;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;sum_l&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;sum_r&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;mid&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(treeY[cnt][root].r&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;treeY[cnt][root].l)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(l</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">mid)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum_l&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;searchY(cnt,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root,l,r);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(r</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">mid)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum_r&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;searchY(cnt,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,l,r);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;sum_l&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;sum_r;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;searchX(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;root,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;ll,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;rr,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;l,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;r)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ll</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">treeX[root].l&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;rr</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">treeX[root].r)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;searchY(treeX[root].pos,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,l,r);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;sum_l&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,sum_r&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;mid&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(treeX[root].l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">treeX[root].r)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ll</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">mid)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum_l&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;searchX(</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root,ll,rr,l,r);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(rr</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">mid)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum_r&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;searchX(</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,ll,rr,l,r);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;sum_l&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;sum_r;<br />}<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;addY(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cnt,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;root,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;w)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;treeY[cnt][root].sum&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;w;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(treeY[cnt][root].l&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">treeY[cnt][root].r)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;mid&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(treeY[cnt][root].l&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;treeY[cnt][root].r)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;puts("y");</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(y</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">mid)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addY(cnt,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root,y,w);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addY(cnt,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,y,w);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;;<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;addX(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;root,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;w)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;treeX[root].sum&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;w;<br />&nbsp;&nbsp;&nbsp;&nbsp;addY(treeX[root].pos,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,y,w);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(treeX[root].l&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;treeX[root].r)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;puts("x");</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;mid&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(treeX[root].l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">treeX[root].r)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(x</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">mid)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addX(</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root,x,y,w);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addX(</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,x,y,w);<br />}</span></div><br />C和C++弱啊，该写个模版的。<br /><br /><img src ="http://www.cppblog.com/ArcTan/aggbug/196862.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-12-30 21:11 <a href="http://www.cppblog.com/ArcTan/articles/196862.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Trie树</title><link>http://www.cppblog.com/ArcTan/articles/187920.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Wed, 22 Aug 2012 01:26:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/187920.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/187920.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/187920.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/187920.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/187920.html</trackback:ping><description><![CDATA[<div><div id="blog_text"><p style="text-indent: 2em">Trie树就是字符树，其核心思想就是空间换时间</p> <p style="text-indent: 2em">举个简单的例子。</p> <p style="text-indent: 2em">给你100000个长度不超过10的单词。对于每一个单词，我们要判断他出没出现过，如果出现了，第一次出现第几个位置。</p> <p style="text-indent: 2em">这题当然可以用hash来，但是我要介绍的是trie树。在某些方面它的用途更大。比如说对于某一个单词，我要询问它的前缀是否出现过。这样hash就不好搞了，而用trie还是很简单。</p> <p style="text-indent: 2em">现在回到例子中，如果我们用最傻的方法，对于每一个单词，我们都要去查找它前面的单词中是否有 它。那么这个算法的复杂度就是O(n^2)。显然对于100000的范围难以接受。现在我们换个思路想。假设我要查询的单词是abcd，那么在他前面的单 词中，以b，c，d，f之类开头的我显然不必考虑。而只要找以a开头的中是否存在abcd就可以了。同样的，在以a开头中的单词中，我们只要考虑以b作为 第二个字母的&#8230;&#8230;这样一个树的模型就渐渐清晰了&#8230;&#8230;</p> <p style="text-indent: 2em">假设有b，abc，abd，bcd，abcd，efg，hii这6个单词，我们构建的树就是这样的。</p> <p style="text-indent: 2em"> </p> <div> <p><a target="_blank" href="http://epic.32o.cn/attachments/month_0707/z200777202049.JPG"><img src="http://epic.32o.cn/attachments/month_0707/z200777202049.JPG" border="0"  alt="" /></a></p> <p style="text-indent: 2em">对于每一个节点，从根遍历到他的过程就是一个单词，如果这个节点被标记为红色，就表示这个单词存在，否则不存在。</p> <p style="text-indent: 2em">那么，对于一个单词，我只要顺着他从跟走到对应的节点，再看这个节点是否被标记为红色就可以知道它是否出现过了。把这个节点标记为红色，就相当于插入了这个单词。</p> <p style="text-indent: 2em">这样一来我们询问和插入可以一起完成，所用时间仅仅为单词长度，在这一个样例，便是10。</p> <p style="text-indent: 2em">我们可以看到，trie树每一层的节点数是26^i级别的。所以为了节省空间。我们用动态链表，或者用数组来模拟动态。空间的花费，不会超过单词数&#215;单词长度。</p> </div></div></div><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"><img id="Code_Closed_Image_092522" onclick="this.style.display='none'; Code_Closed_Text_092522.style.display='none'; Code_Open_Image_092522.style.display='inline'; Code_Open_Text_092522.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" height="16" width="11" align="top"><img id="Code_Open_Image_092522" style="display: none" onclick="this.style.display='none'; Code_Open_Text_092522.style.display='none'; Code_Closed_Image_092522.style.display='inline'; Code_Closed_Text_092522.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" height="16" width="11" align="top"><span id="Code_Closed_Text_092522" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"></span><span id="Code_Open_Text_092522" style="display: none"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">math.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;MAX&nbsp;26</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;TrieNode{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;TrieNode&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">next[MAX];<br />}&nbsp;Tree[</span><span style="color: #000000; ">10000</span><span style="color: #000000; ">];<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;tot&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /><br /></span><span style="color: #008000; ">/*</span><span style="color: #008000; ">初始化</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;InitTrieRoot(TrieNode&nbsp;</span><span style="color: #000000; ">**</span><span style="color: #000000; ">pRoot)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">pRoot&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;NULL;<br />}<br /><br /></span><span style="color: #008000; ">/*</span><span style="color: #008000; ">创建新结点</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />TrieNode&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">CreateTrieNode()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;TrieNode&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">Tree[tot</span><span style="color: #000000; ">++</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">cnt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;MAX&nbsp;;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">next[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;p;<br />}<br /><br /></span><span style="color: #008000; ">/*</span><span style="color: #008000; ">插入</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;InsertTrie(TrieNode&nbsp;</span><span style="color: #000000; ">**</span><span style="color: #000000; ">pRoot&nbsp;,&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">s)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;,&nbsp;k;<br />&nbsp;&nbsp;&nbsp;&nbsp;TrieNode&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">(p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">pRoot))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">pRoot&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;CreateTrieNode();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(s[i])<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;s[i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">a</span><span style="color: #000000; ">'</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">确定branch</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(p</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">next[k])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">next[k]</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">next[k]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;CreateTrieNode();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;p</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">next[k];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">查找</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;SearchTrie(TrieNode&nbsp;</span><span style="color: #000000; ">**</span><span style="color: #000000; ">pRoot&nbsp;,&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">s)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;TrieNode&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;,&nbsp;k;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">(p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">pRoot))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&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 />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(s[i])<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;s[i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">a</span><span style="color: #000000; ">'</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(p</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">next[k]&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;NULL)&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 />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;p</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">next[k];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;p</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">cnt;<br />}<br /><br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;s[</span><span style="color: #000000; ">11</span><span style="color: #000000; ">];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;TrieNode&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">Root&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;InitTrieRoot(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">Root);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(gets(s)&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;s[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">])<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InsertTrie(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">Root&nbsp;,&nbsp;s);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(gets(s)&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;s[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">])<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&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; ">,&nbsp;SearchTrie(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">Root&nbsp;,&nbsp;s));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&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 />}<br /></span></span></div><br /><br /><img src ="http://www.cppblog.com/ArcTan/aggbug/187920.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-08-22 09:26 <a href="http://www.cppblog.com/ArcTan/articles/187920.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 1182食物链(并查集的应用)</title><link>http://www.cppblog.com/ArcTan/articles/185248.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Thu, 26 Jul 2012 13:51:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/185248.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/185248.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/185248.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/185248.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/185248.html</trackback:ping><description><![CDATA[并查集好经典的应用，搞明白这个题目，可以秒杀POJ所有并查集题目!<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: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;node{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;father;根节点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;relation;与根节点关系:</span><span style="color: #000000; ">0</span><span style="color: #000000;">&nbsp;同类，1吃根节点，2被吃<br />}&nbsp;line[maxn];<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;find(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(x</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">line[x].father)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;tmp</span><span style="color: #000000; ">=</span><span style="color: #000000; ">line[x].father;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line[x].father</span><span style="color: #000000; ">=</span><span style="color: #000000; ">find(tmp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">找规律，求出公式</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num[x]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(line[x].relation</span><span style="color: #000000; ">+</span><span style="color: #000000; ">line[tmp].relation)&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returen&nbsp;line[x].father;<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;union(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;d)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;fx</span><span style="color: #000000; ">=</span><span style="color: #000000; ">find(x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;fy</span><span style="color: #000000; ">=</span><span style="color: #000000; ">find(y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line[fx].father</span><span style="color: #000000; ">=</span><span style="color: #000000; ">fy;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">找规律，求出公式</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line[fx].relation</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(line[y].relation</span><span style="color: #000000; ">-</span><span style="color: #000000; ">line[x].relation</span><span style="color: #000000; ">+</span><span style="color: #000000; ">2</span><span style="color: #000000; ">+</span><span style="color: #000000; ">d)&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;;<br />}<br /></span></div><br />Thinking &amp;&amp; Coding！！！<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: #000000; ">#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 />#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 />#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 />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cmath</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">ctime</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cassert</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">sstream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">fstream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#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 />#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 />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">vector</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">queue</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#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: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;min(x,y)&nbsp;(x&lt;y?x:y)</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;max(x,y)&nbsp;(x&gt;y?x:y)</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;swap(t,x,y)&nbsp;(t=x,x=y,y=t)</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;clr(list)&nbsp;memset(list,0,sizeof(list))</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;maxn&nbsp;50005</span><span style="color: #000000; "><br /></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: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;father[maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;num[maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;find(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(x</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">father[x])<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;tmp</span><span style="color: #000000; ">=</span><span style="color: #000000; ">father[x];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;father[x]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">find(father[x]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num[x]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(num[x]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">num[tmp])&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;father[x];<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;union_set(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;d)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;fx</span><span style="color: #000000; ">=</span><span style="color: #000000; ">find(x);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;fy</span><span style="color: #000000; ">=</span><span style="color: #000000; ">find(y);<br />&nbsp;&nbsp;&nbsp;&nbsp;father[fx]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">fy;<br />&nbsp;&nbsp;&nbsp;&nbsp;num[fx]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(num[y]</span><span style="color: #000000; ">-</span><span style="color: #000000; ">num[x]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">2</span><span style="color: #000000; ">+</span><span style="color: #000000; ">d)&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,m;<br />&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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;flag</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;father[i]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i,num[i]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">m;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;d,x,y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d%d%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">d,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">x,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(x</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">n&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;y</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">n)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">continue</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(d</span><span style="color: #000000; ">==</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;x</span><span style="color: #000000; ">==</span><span style="color: #000000; ">y)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">continue</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;fx</span><span style="color: #000000; ">=</span><span style="color: #000000; ">find(x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;fy</span><span style="color: #000000; ">=</span><span style="color: #000000; ">find(y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(d</span><span style="color: #000000; ">==</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;fx</span><span style="color: #000000; ">==</span><span style="color: #000000; ">fy)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;((num[x]</span><span style="color: #000000; ">-</span><span style="color: #000000; ">num[y]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">3</span><span style="color: #000000; ">)</span><span style="color: #000000; ">%</span><span style="color: #000000; ">3</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">continue</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(d</span><span style="color: #000000; ">==</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;fx</span><span style="color: #000000; ">==</span><span style="color: #000000; ">fy&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;num[x]</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">num[y])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">continue</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;union_set(x,y,d);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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; ">,ans);<br />&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 />}<br /></span></div><br /><br /><br /><br /><br /><img src ="http://www.cppblog.com/ArcTan/aggbug/185248.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-07-26 21:51 <a href="http://www.cppblog.com/ArcTan/articles/185248.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>并查集基础和的应用</title><link>http://www.cppblog.com/ArcTan/articles/185217.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Thu, 26 Jul 2012 11:28:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/185217.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/185217.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/185217.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/185217.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/185217.html</trackback:ping><description><![CDATA[今天给SDUT的ACMer看了看并查集，总结总结下：<br />&nbsp;&nbsp; 并查集，干的就是&#8220;并&#8221;和&#8220;查&#8221;两件事。很多与集合相关的操作都可以用并查集高效的解决。<br /><br /><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     int Find(int x)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     if (tree[x].parent != x)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     tree[x].parent = Find(tree[x].parent);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     return tree[x].parent;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     } <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     void Merge(int a, int b, int p, int q, int d)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     if (tree[q].depth &gt; tree[p].depth) tree[p].parent = q;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     else<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     tree[q].parent = p;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     if (tree[p].depth == tree[q].depth) tree[p].depth++;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     }</p></div><div><br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     其中Find()函数用了路径压缩优化，而Merge()函数用了启发式合并的优化(个人感觉有了路径压缩，启发式合并优化的效果并不明显，而经常因为题目和代码的限制，启发式合并会被我们省略)。</div><br />&nbsp;&nbsp; &nbsp;&nbsp; 有个问题，如何求节点到跟节点的距离？<br /><br />&nbsp;<img src ="http://www.cppblog.com/ArcTan/aggbug/185217.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-07-26 19:28 <a href="http://www.cppblog.com/ArcTan/articles/185217.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 3468 线段树</title><link>http://www.cppblog.com/ArcTan/articles/184993.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Wed, 25 Jul 2012 02:54:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/184993.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/184993.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/184993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/184993.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/184993.html</trackback:ping><description><![CDATA[<a href="http://poj.org/problem?id=3468"><a></a></a><a href="http://poj.org/problem?id=3468">http://poj.org/problem?id=3468</a><br /><br />线段数的构造，查询，修改！<br />struct node{<br />&nbsp;&nbsp; int l,r,m;<br />&nbsp;&nbsp; long long sum;//当前区间的和<br />&nbsp;&nbsp; long long add;//区间需要加上的数值<br />}<br /><br />题意：<br />&nbsp;&nbsp; &nbsp;&nbsp; 给定n个数字A1,A2,..,An，Q个操作。<br />&nbsp;&nbsp; &nbsp;&nbsp; C x y z,把区间x y内的数都加上z<br />&nbsp;&nbsp; &nbsp;&nbsp; Q x y，求区间x y内所有数的和。<br />总结：<br />&nbsp;&nbsp; &nbsp;&nbsp; 基础代码一定要对，调试了半天，最后发现是swap(x,y,t)写错了！！！！<br />&nbsp;&nbsp; &nbsp;&nbsp; WA了一次，数据是long long才行，要分析清楚数据范围！！！<br /><div><img src="data:image/png;base64,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" alt="" /></div><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: #000000; ">#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 />#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 />#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 />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cmath</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">ctime</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cassert</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">sstream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">fstream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#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 />#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 />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">vector</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">queue</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#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: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;min(x,y)&nbsp;(x&lt;y?x:y)</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;max(x,y)&nbsp;(x&gt;y?x:y)</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;swap(x,y,t)&nbsp;(t=x,x=y,y=t)</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;clr(list)&nbsp;memset(list,0,sizeof(list))</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;LL&nbsp;long&nbsp;long</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;maxn&nbsp;200005</span><span style="color: #000000; "><br /></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: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;node{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;l,r,m;<br />&nbsp;&nbsp;&nbsp;&nbsp;LL&nbsp;sum;<br />&nbsp;&nbsp;&nbsp;&nbsp;LL&nbsp;add;<br />}&nbsp;tree[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a[maxn];<br />LL&nbsp;build(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;l,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;r,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;root)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].l</span><span style="color: #000000; ">=</span><span style="color: #000000; ">l;<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].r</span><span style="color: #000000; ">=</span><span style="color: #000000; ">r;<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].m</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">r)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].add</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(l</span><span style="color: #000000; ">==</span><span style="color: #000000; ">r)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].sum</span><span style="color: #000000; ">=</span><span style="color: #000000; ">a[l];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;tree[root].sum;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;sum_l</span><span style="color: #000000; ">=</span><span style="color: #000000; ">build(l,(l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">r)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,root</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;sum_r</span><span style="color: #000000; ">=</span><span style="color: #000000; ">build((l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">r)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,r,root</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].sum</span><span style="color: #000000; ">=</span><span style="color: #000000; ">sum_l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">sum_r;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;tree[root].sum;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;insert(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;l,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;r,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;add,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;root)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(l</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">tree[root].l&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;r</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">tree[root].r)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].add</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">add;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].sum</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">add&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(tree[root].r</span><span style="color: #000000; ">-</span><span style="color: #000000; ">tree[root].l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&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 />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(tree[root].add)&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">向下更新</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root].sum</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">tree[root].add&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(tree[root</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">].r</span><span style="color: #000000; ">-</span><span style="color: #000000; ">tree[root</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">].l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root].add</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">tree[root].add;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].sum</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">tree[root].add&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(tree[root</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].r</span><span style="color: #000000; ">-</span><span style="color: #000000; ">tree[root</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].add</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">tree[root].add;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].add</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(l</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">tree[root].m)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(l,r,add,root</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(r</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">tree[root].m)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(l,r,add,root</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].sum</span><span style="color: #000000; ">=</span><span style="color: #000000; ">tree[root</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">].sum</span><span style="color: #000000; ">+</span><span style="color: #000000; ">tree[root</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].sum;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">这里回溯啊</span><span style="color: #008000; "><br /></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 />}<br />LL&nbsp;search(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;l,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;r,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;root)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(l</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">tree[root].l&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;r</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">tree[root].r)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;tree[root].sum;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(tree[root].add)&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">向下更新</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root].sum</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">tree[root].add&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(tree[root</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">].r</span><span style="color: #000000; ">-</span><span style="color: #000000; ">tree[root</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">].l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root].add</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">tree[root].add;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].sum</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">tree[root].add&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(tree[root</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].r</span><span style="color: #000000; ">-</span><span style="color: #000000; ">tree[root</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].add</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">tree[root].add;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].add</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;LL&nbsp;sum_l</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,sum_r</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(l</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">tree[root].m)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum_l</span><span style="color: #000000; ">=</span><span style="color: #000000; ">search(l,r,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(r</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">tree[root].m)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum_r</span><span style="color: #000000; ">=</span><span style="color: #000000; ">search(l,r,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">root</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;sum_l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">sum_r;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,m;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,y,z;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;tmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;ch;<br />&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 />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&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; ">a[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;build(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,n,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</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 />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\n%c</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">ch);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ch</span><span style="color: #000000; ">==</span><span style="color: #000000; ">'</span><span style="color: #000000; ">C</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d%d%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">x,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">y,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">z);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(x</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">y)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(x,y,tmp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(x,y,z,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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; ">x,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(x</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">y)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(x,y,tmp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%I64d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,search(x,y,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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 />}<br /></span></div><br /><br /><img src ="http://www.cppblog.com/ArcTan/aggbug/184993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-07-25 10:54 <a href="http://www.cppblog.com/ArcTan/articles/184993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdu 2419 (STL：set multiset)</title><link>http://www.cppblog.com/ArcTan/articles/183352.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Sat, 14 Jul 2012 05:08:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/183352.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/183352.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/183352.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/183352.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/183352.html</trackback:ping><description><![CDATA[首先膜拜膜拜青岛二中的 aKc大牛啊，我彻底给跪了！！！<br />差距太大，好好努力吧！！！<br /><br />算法，数据结构，C++，STL。需要去学的啊，下午开始学吧学吧<br /><br />图的操作，使用集合来维护，把操作序列倒过来看，割边则看做两个集合的合并。<br /><br />STL 的set和multiset 很强大啊，第一用STL写东西<br /><br />wangs ,你该努力了，大牛之路，远着呢。<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: #000000; ">#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 />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cctype</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#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 />#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 />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cmath</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#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 />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">vector</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">sstream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#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 />#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 />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">queue</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stack</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">fstream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">numeric</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iomanip</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">bitset</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">list</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdexcept</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#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 />#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 />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">ctime</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cmath</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">climits</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /><br /></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 /><br />typedef&nbsp;pair</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;PII;<br /></span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;MAXN&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">20010</span><span style="color: #000000; ">,&nbsp;MAXM&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">60010</span><span style="color: #000000; ">,&nbsp;MAXQ&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">300010</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;value[MAXN],&nbsp;query[MAXQ][</span><span style="color: #000000; ">3</span><span style="color: #000000; ">];<br />multiset</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">PII</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;e;<br />multiset</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;v[MAXN];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;pre[MAXN];<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;root(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(pre[a]&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;a)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pre[a]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;root(pre[a]);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;pre[a];<br />}<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;unionSet(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;b)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;multiset</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">::iterator&nbsp;it;<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;root(a),&nbsp;b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;root(b);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(a&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;b)<br />&nbsp;&nbsp;&nbsp;&nbsp;&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 />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(v[a].size()&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;v[b].size())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(a,&nbsp;b);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;(it&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;v[a].begin();&nbsp;it&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;v[a].end();&nbsp;it</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[b].insert(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">it);<br />&nbsp;&nbsp;&nbsp;&nbsp;v[a].clear();<br />&nbsp;&nbsp;&nbsp;&nbsp;pre[a]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;b;<br />&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 />}<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;update(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;ta&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;a;<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;root(a);<br />&nbsp;&nbsp;&nbsp;&nbsp;v[a].erase(v[a].find(value[ta]));<br />&nbsp;&nbsp;&nbsp;&nbsp;v[a].insert(x);<br />&nbsp;&nbsp;&nbsp;&nbsp;value[ta]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;x;<br />&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 />}<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,&nbsp;m,&nbsp;q;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a,&nbsp;b;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i,u;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cas</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;ch[</span><span style="color: #000000; ">3</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;ct&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;sum&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;multiset</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">PII</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">::iterator&nbsp;it;<br />&nbsp;&nbsp;&nbsp;&nbsp;multiset</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">::iterator&nbsp;tp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d%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,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">q)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">3</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.clear();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;n;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[i].clear();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;n;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">value[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pre[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;m;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">a,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">b);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(a&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;b)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(a,&nbsp;b);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.insert(PII(a,&nbsp;b));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;q;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&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; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">ch);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">query[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">],&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">query[i][</span><span style="color: #000000; ">2</span><span style="color: #000000; ">]);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ch[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(ch[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">E</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(query[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;query[i][</span><span style="color: #000000; ">2</span><span style="color: #000000; ">])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(query[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">],&nbsp;query[i][</span><span style="color: #000000; ">2</span><span style="color: #000000; ">]);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;e.find(PII(query[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">],&nbsp;query[i][</span><span style="color: #000000; ">2</span><span style="color: #000000; ">]));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.erase(it);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(ch[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">U</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(value[query[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]],&nbsp;query[i][</span><span style="color: #000000; ">2</span><span style="color: #000000; ">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;n;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[i].insert(value[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(it&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;e.begin();&nbsp;it&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;e.end();&nbsp;it</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unionSet(it</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">first,&nbsp;it</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">second);<br /><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(it&nbsp;=&nbsp;e.begin();&nbsp;it&nbsp;!=&nbsp;e.end();&nbsp;it++)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d&nbsp;%d\n",it-&gt;first,&nbsp;it-&gt;second);</span><span style="color: #008000; "><br /></span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ct</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /><br />&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&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;q&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(query[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">E</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unionSet(query[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">],&nbsp;query[i][</span><span style="color: #000000; ">2</span><span style="color: #000000; ">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(query[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">U</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update(query[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">],&nbsp;query[i][</span><span style="color: #000000; ">2</span><span style="color: #000000; ">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ct&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;root(query[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;v[u].lower_bound(query[i][</span><span style="color: #000000; ">2</span><span style="color: #000000; ">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(tp&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;v[u].end())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">tp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d&nbsp;%d\n",u,*tp);</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Case&nbsp;%d:&nbsp;%0.3lf\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">++</span><span style="color: #000000; ">cas,(</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">)sum</span><span style="color: #000000; ">/</span><span style="color: #000000; ">ct);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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 />}<br /></span></div><img src ="http://www.cppblog.com/ArcTan/aggbug/183352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-07-14 13:08 <a href="http://www.cppblog.com/ArcTan/articles/183352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj2832(单调队列)----原来就是贪心啊！！！</title><link>http://www.cppblog.com/ArcTan/articles/172774.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Wed, 25 Apr 2012 14:48:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/172774.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/172774.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/172774.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/172774.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/172774.html</trackback:ping><description><![CDATA[：jh辉神说，单调队列单调栈就是贪心嘛，哎哎，怪自己太无知了！！！！<br /><br />windows,找出区间的最大最小元素，单调队列的经典应用嘛。<br />应该说，贪心的思想，方法，单调队列是实现的技术才好吧。<br />poj2832<br />一次AC，要多理解问题的本质啊！！！<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: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">math.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,k;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a[</span><span style="color: #000000; ">1000005</span><span style="color: #000000; ">],q[</span><span style="color: #000000; ">1000005</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i,head,tail;<br />&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; ">,(</span><span style="color: #000000; ">30</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)</span><span style="color: #000000; ">*</span><span style="color: #000000; ">3</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&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; ">k)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">2</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n&nbsp;;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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; ">a[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tail</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(q,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(q));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n&nbsp;;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(head</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">tail</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">a[q[tail]]</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">a[i])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tail</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tail</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[tail]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(q[head]</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">k)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">k)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,a[q[head]]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tail</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(q,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(q));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n&nbsp;;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(head</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">tail</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">a[q[tail]]</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">a[i])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tail</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tail</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[tail]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(q[head]</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">k)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">k)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,a[q[head]]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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 />}<br /></span></div>额，这个pascal的代码好熟悉啊：<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: #000000; ">var<br />&nbsp;&nbsp;n</span><span style="color: #000000; ">,</span><span style="color: #000000; ">k</span><span style="color: #000000; ">,</span><span style="color: #000000; ">i</span><span style="color: #000000; ">,</span><span style="color: #000000; ">head</span><span style="color: #000000; ">,</span><span style="color: #000000; ">tail:longint</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;a</span><span style="color: #000000; ">,</span><span style="color: #000000; ">q:array</span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">0..1000001</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; ">&nbsp;of&nbsp;longint</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; "><br />begin<br />&nbsp;&nbsp;readln(n</span><span style="color: #000000; ">,</span><span style="color: #000000; ">k)</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;for&nbsp;i:</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;to&nbsp;n&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;read(a</span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">i</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; ">)</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;head:</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #008000; ">;</span><span style="color: #008000; ">tail:=0;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;for&nbsp;i:</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;to&nbsp;n&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(head&lt;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">tail)&nbsp;and&nbsp;(a</span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">q[tail</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; ">]&gt;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">a</span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">i</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; ">)&nbsp;do&nbsp;dec(tail)</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc(tail)</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q</span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">tail</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; ">:</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;q</span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">head</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i-k&nbsp;do&nbsp;inc(head)</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;i&gt;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">k&nbsp;then&nbsp;write(a</span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">q[head</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; ">]</span><span style="color: #000000; ">,</span><span style="color: #000000; ">'&nbsp;')</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;end</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;writeln</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;fillchar(q</span><span style="color: #000000; ">,</span><span style="color: #000000; ">sizeof(q)</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;head:</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #008000; ">;</span><span style="color: #008000; ">tail:=0;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;for&nbsp;i:</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;to&nbsp;n&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(head&lt;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">tail)&nbsp;and&nbsp;(a</span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">q[tail</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; ">]&lt;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">a</span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">i</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; ">)&nbsp;do&nbsp;dec(tail)</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc(tail)</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q</span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">tail</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; ">:</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;q</span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">head</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i-k&nbsp;do&nbsp;inc(head)</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;i&gt;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">k&nbsp;then&nbsp;write(a</span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">q[head</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; ">]</span><span style="color: #000000; ">,</span><span style="color: #000000; ">'&nbsp;')</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;end</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">&nbsp;&nbsp;writeln</span><span style="color: #008000; ">;<br /></span><span style="color: #000000; ">end.</span></div>居然能没有pascal???<br /><br /><br /><img src ="http://www.cppblog.com/ArcTan/aggbug/172774.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-04-25 22:48 <a href="http://www.cppblog.com/ArcTan/articles/172774.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 2082(单调栈)数学味有点重哦</title><link>http://www.cppblog.com/ArcTan/articles/172662.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Tue, 24 Apr 2012 13:06:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/172662.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/172662.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/172662.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/172662.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/172662.html</trackback:ping><description><![CDATA[<div>poj 2082<br />&nbsp;&nbsp;&nbsp;&nbsp; 这个题目比较坑爹，简单的问题让他给叙述的深奥无比！ＮＰ！！！！数学理解能力当然重要啊！<br />　　搞清题意后，想到的就是ＤＰ了，感觉有个四边形不等式在里面可以用。。。贪心法应该也是正确的啊，不过一直ＷＡ，也不知道怎么回事。该好好研究研究单调栈，单调队列了。。。。呜呜呜匆<br />　　ＷＡ了无数次，单调栈一次ＡＣ！<br /><div><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: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">math.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n;<br /></span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;stack[</span><span style="color: #000000; ">50005</span><span style="color: #000000; ">],pos[</span><span style="color: #000000; ">50005</span><span style="color: #000000; ">],sum;<br /></span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;ans,w,h;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i,top;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&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; ">n)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">n</span><span style="color: #000000; ">!=-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;top</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n&nbsp;;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%I64d%I64d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">w,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">h);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(top</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">h</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ans</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">(sum</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(sum</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">w;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">h;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos[top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">sum;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(top</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ans</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">(sum</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(sum</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%I64d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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></div><span style="color: #000000; "></span></div></div><img src ="http://www.cppblog.com/ArcTan/aggbug/172662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-04-24 21:06 <a href="http://www.cppblog.com/ArcTan/articles/172662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj3250(单调栈单调队列)--</title><link>http://www.cppblog.com/ArcTan/articles/172657.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Tue, 24 Apr 2012 12:57:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/172657.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/172657.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/172657.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/172657.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/172657.html</trackback:ping><description><![CDATA[这个题解很好，ＹＭ啊<br /><div>http://hi.baidu.com/oichampion/blog/item/ed51694a0e1256d9d1c86ae4.html</div><br />这个题目ＷＡ了一下午了，哎哎，得研究研究单调栈和单调队列去！<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: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">math.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;stack[</span><span style="color: #000000; ">80008</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i,n,top;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;x,ans;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&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; ">n)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n&nbsp;;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%I64d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(top</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">x</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">top;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%I64d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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 />}<br /></span></div><img src ="http://www.cppblog.com/ArcTan/aggbug/172657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-04-24 20:57 <a href="http://www.cppblog.com/ArcTan/articles/172657.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 3494（单调栈-求矩阵面积）数据压缩技巧</title><link>http://www.cppblog.com/ArcTan/articles/172625.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Tue, 24 Apr 2012 09:07:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/172625.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/172625.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/172625.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/172625.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/172625.html</trackback:ping><description><![CDATA[额，今天的意外收获就是单调栈。<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: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">math.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,m;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a[</span><span style="color: #000000; ">2005</span><span style="color: #000000; ">],stack[</span><span style="color: #000000; ">2005</span><span style="color: #000000; ">],pos[</span><span style="color: #000000; ">2005</span><span style="color: #000000; ">],ans;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;GetAns()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i,top;<br />&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;stack[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pos[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n&nbsp;;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(top</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">a[i]</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ans</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">(i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</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; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">a[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos[top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(top)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ans</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">(n</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(n</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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 />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i,j,x;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&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; ">m,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">2</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(a,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(a));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">m&nbsp;;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;j</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n&nbsp;;&nbsp;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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; ">x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(x)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[j]</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[j]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetAns();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&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; ">,ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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 />}<br /></span></div><br />sdu的段神说的poj3050该看看了，<img src ="http://www.cppblog.com/ArcTan/aggbug/172625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-04-24 17:07 <a href="http://www.cppblog.com/ArcTan/articles/172625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 2796(单调栈-连续和最大)</title><link>http://www.cppblog.com/ArcTan/articles/172623.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Tue, 24 Apr 2012 08:53:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/172623.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/172623.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/172623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/172623.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/172623.html</trackback:ping><description><![CDATA[这个水题又加深了点对单调栈的认识了。不能浅尝辄止！<br /><br />这个不是special judge么？<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: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">math.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;pos[</span><span style="color: #000000; ">100005</span><span style="color: #000000; ">],n;<br /></span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;stack[</span><span style="color: #000000; ">100005</span><span style="color: #000000; ">],sum[</span><span style="color: #000000; ">100005</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i,s,t,top;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;a,ans;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&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; ">n)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;stack[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;pos[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;sum[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;s</span><span style="color: #000000; ">=</span><span style="color: #000000; ">t</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n&nbsp;;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%I64d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">a);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum[i]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">sum[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">a;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(top</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">a</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ans</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">(sum[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">-</span><span style="color: #000000; ">sum[pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(sum[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">-</span><span style="color: #000000; ">sum[pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;t</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; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">a;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos[top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(top)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ans</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">(sum[n]</span><span style="color: #000000; ">-</span><span style="color: #000000; ">sum[pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top])&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">这里是&lt;=才过的，不是special&nbsp;judge么？怎么回事呢，得好好看懂题目啊！</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(sum[n]</span><span style="color: #000000; ">-</span><span style="color: #000000; ">sum[pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;t</span><span style="color: #000000; ">=</span><span style="color: #000000; ">n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%I64d\n%d&nbsp;%d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,ans,s,t);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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 />}<br /></span></div><br />突然发现自己喜欢写单调栈了，呵呵，这个专题好东西。<br />感谢sdu的奇奇神提供练习专题！！！ORZ<br /><br /><br /><img src ="http://www.cppblog.com/ArcTan/aggbug/172623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-04-24 16:53 <a href="http://www.cppblog.com/ArcTan/articles/172623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj1694(单调栈-求矩形最大面积)</title><link>http://www.cppblog.com/ArcTan/articles/172613.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Tue, 24 Apr 2012 07:32:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/172613.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/172613.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/172613.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/172613.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/172613.html</trackback:ping><description><![CDATA[今天就做做单调栈，挺好写的。应该多了解了原理<br />字符串读入还是有问题啊，这个不行，得看清楚输入后在写！<br />一次ＡＣ：<div><img src="data:image/png;base64,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" alt="" /></div><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: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">math.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,m,ans;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a[</span><span style="color: #000000; ">1005</span><span style="color: #000000; ">],stack[</span><span style="color: #000000; ">1005</span><span style="color: #000000; ">],pos[</span><span style="color: #000000; ">1005</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;GetAns()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i,top;<br />&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;stack[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pos[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n&nbsp;;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(top</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">a[i]</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ans</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">(i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</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; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">a[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos[top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(top</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ans</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">(n</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(n</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cas,i,j;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;ch[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">];<br />&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; ">cas);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(cas</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(a,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(a));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&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; ">m,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</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&nbsp;;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(j</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; ">n&nbsp;;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">ch);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ch[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">'</span><span style="color: #000000; ">F</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[j]</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[j]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetAns();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&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; ">,</span><span style="color: #000000; ">3</span><span style="color: #000000; ">*</span><span style="color: #000000; ">ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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 />}<br /></span></div>加油啊，加油！<img src ="http://www.cppblog.com/ArcTan/aggbug/172613.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-04-24 15:32 <a href="http://www.cppblog.com/ArcTan/articles/172613.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 2559 poj 2082(单调栈)</title><link>http://www.cppblog.com/ArcTan/articles/172602.html</link><dc:creator>wangs</dc:creator><author>wangs</author><pubDate>Tue, 24 Apr 2012 06:53:00 GMT</pubDate><guid>http://www.cppblog.com/ArcTan/articles/172602.html</guid><wfw:comment>http://www.cppblog.com/ArcTan/comments/172602.html</wfw:comment><comments>http://www.cppblog.com/ArcTan/articles/172602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ArcTan/comments/commentRss/172602.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ArcTan/services/trackbacks/172602.html</trackback:ping><description><![CDATA[昨天ACdream群里在讨论单调栈，今天就遇到无数WA，现在也没有没有搞明白单调栈的原理，更没有搞明白我的DP 或者 贪心，怎么不对。<br />单调栈是个好东西，容我去看看啊！<br />poj 2559<br />总结：long long类型，要和int区分开来，输出格式用"%I64d"。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据结构该看看了。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 自己多分析分析。<br />写完一次就AC了，之前的贪心一直都WA呢。囧&#8230;&#8230;<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: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">math.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,pos[</span><span style="color: #000000; ">100005</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;stack[</span><span style="color: #000000; ">100005</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i,top;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;a,ans;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&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; ">n)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">n)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;pos[top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n&nbsp;;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%I64d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">a);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(top</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">a</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ans</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">)(i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000;">stack[top])&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">)(i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">a;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos[top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(top</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ans</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">)(n</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">)(n</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%I64d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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 />}<br /></span></div><br />poj 2082<br />&nbsp;&nbsp;&nbsp;&nbsp; 这个题目比较坑爹，简单的问题让他给叙述的深奥无比！ＮＰ！！！！数学理解能力当然重要啊！<br />　　搞清题意后，想到的就是ＤＰ了，感觉有个四边形不等式在里面可以用。。。贪心法应该也是正确的啊，不过一直ＷＡ，也不知道怎么回事。该好好研究研究单调栈，单调队列了。。。。呜呜呜匆<br />　　ＷＡ了无数次，单调栈一次ＡＣ！<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">math.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n;<br /></span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;stack[</span><span style="color: #000000; ">50005</span><span style="color: #000000; ">],pos[</span><span style="color: #000000; ">50005</span><span style="color: #000000; ">],sum;<br /></span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;ans,w,h;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i,top;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&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; ">n)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">n</span><span style="color: #000000; ">!=-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;top</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n&nbsp;;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%I64d%I64d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">w,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">h);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(top</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">h</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ans</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">(sum</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(sum</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">w;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">h;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos[top]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">sum;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(top</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ans</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">(sum</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(sum</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pos[top</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stack[top];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%I64d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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 />}<br /></span></div><br />额，要学的东西还很多啊。<br /><img src ="http://www.cppblog.com/ArcTan/aggbug/172602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ArcTan/" target="_blank">wangs</a> 2012-04-24 14:53 <a href="http://www.cppblog.com/ArcTan/articles/172602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>