﻿<?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++博客-CSniper</title><link>http://www.cppblog.com/CSniper/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 05 Apr 2026 14:40:29 GMT</lastBuildDate><pubDate>Sun, 05 Apr 2026 14:40:29 GMT</pubDate><ttl>60</ttl><item><title>[DP] PKU 1141 括号序列</title><link>http://www.cppblog.com/CSniper/archive/2012/10/11/193163.html</link><dc:creator>yajunw</dc:creator><author>yajunw</author><pubDate>Thu, 11 Oct 2012 05:57:00 GMT</pubDate><guid>http://www.cppblog.com/CSniper/archive/2012/10/11/193163.html</guid><wfw:comment>http://www.cppblog.com/CSniper/comments/193163.html</wfw:comment><comments>http://www.cppblog.com/CSniper/archive/2012/10/11/193163.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CSniper/comments/commentRss/193163.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CSniper/services/trackbacks/193163.html</trackback:ping><description><![CDATA[http://poj.org/problem?id=1141<br />DP, 记录路径。<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 /><br /># define N </span><span style="color: #000000; ">205</span><span style="color: #000000; "><br /># define INF </span><span style="color: #000000; ">1000000000</span><span style="color: #000000; "><br /># define Mid (</span><span style="color: #000000; ">1</span><span style="color: #000000; "> </span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; "> </span><span style="color: #000000; ">10</span><span style="color: #000000; ">)<br /># define Lft (</span><span style="color: #000000; ">1</span><span style="color: #000000; "> </span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; "> </span><span style="color: #000000; ">9</span><span style="color: #000000; "> )<br /># define Rgt (</span><span style="color: #000000; ">1</span><span style="color: #000000; "> </span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; "> </span><span style="color: #000000; ">8</span><span style="color: #000000; "> )<br /><br /></span><span style="color: #0000FF; ">char</span><span style="color: #000000; "> buf[N];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> f[N][N], p[N][N];<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> dp(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> y)<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> </span><span style="color: #000000; ">&amp;</span><span style="color: #000000; "> ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> f[x][y];<br />                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (ans </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> </span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">) </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> ans;<br />                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (x </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> y) </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />                ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> INF;<br />                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> ( (buf[x]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">'</span><span style="color: #000000; ">(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">buf[y]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)</span><span style="color: #000000; ">'</span><span style="color: #000000; ">) </span><span style="color: #000000; ">||</span><span style="color: #000000; "><br />                     (buf[x]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">'</span><span style="color: #000000; ">[</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">buf[y]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">'</span><span style="color: #000000; ">]</span><span style="color: #000000; ">'</span><span style="color: #000000; ">) )<br />                {<br />                                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (ans </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> dp(x</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, y</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">))<br />                                {<br />                                                p[x][y] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Mid;<br />                                                ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> f[x</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][y</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br />                                }<br />                }<br />                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> ( buf[x]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">'</span><span style="color: #000000; ">(</span><span style="color: #000000; ">'</span><span style="color: #000000; "> </span><span style="color: #000000; ">||</span><span style="color: #000000; "> buf[x]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">'</span><span style="color: #000000; ">[</span><span style="color: #000000; ">'</span><span style="color: #000000; "> )<br />                {<br />                                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (ans </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> dp(x</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, y)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />                                {<br />                                                p[x][y] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Rgt;<br />                                                ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> f[x</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][y] </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />                                }<br />                }<br />                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> ( buf[y]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)</span><span style="color: #000000; ">'</span><span style="color: #000000; "> </span><span style="color: #000000; ">||</span><span style="color: #000000; "> buf[y]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">'</span><span style="color: #000000; ">]</span><span style="color: #000000; ">'</span><span style="color: #000000; "> )<br />                {<br />                                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (ans </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> dp(x, y</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; ">)<br />                                {<br />                                                p[x][y] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Lft;<br />                                                ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> f[x][y</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; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />                                }<br />                }<br />                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> x; i </span><span style="color: #000000; ">&lt;</span><span style="color: #000000; "> y; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />                {<br />                                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (ans </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> dp(x, i)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">dp(i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, y))<br />                                {<br />                                                p[x][y] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> i;<br />                                                ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> f[x][i] </span><span style="color: #000000; ">+</span><span style="color: #000000; "> f[i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][y];<br />                                }<br />                }<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> ans;<br />}<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> print(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> s, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> t)<br />{<br />                </span><span style="color: #0000FF; ">switch</span><span style="color: #000000; ">(p[s][t])<br />                {<br />                                </span><span style="color: #0000FF; ">case</span><span style="color: #000000; "> Mid:<br />                                {<br />                                                putchar(buf[s]), print(s</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; ">1</span><span style="color: #000000; ">), putchar(buf[t]);<br />                                                </span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />                                }<br />                                </span><span style="color: #0000FF; ">case</span><span style="color: #000000; "> Lft:<br />                                {<br />                                                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (buf[t] </span><span style="color: #000000; ">==</span><span style="color: #000000; "> </span><span style="color: #000000; ">'</span><span style="color: #000000; ">)</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)<br />                                                                putchar(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">), print(s, t</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">), putchar(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)</span><span style="color: #000000; ">'</span><span style="color: #000000; ">);<br />                                                </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />                                                                putchar(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">[</span><span style="color: #000000; ">'</span><span style="color: #000000; ">), print(s, t</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">), putchar(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">]</span><span style="color: #000000; ">'</span><span style="color: #000000; ">);<br />                                                </span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />                                }<br />                                </span><span style="color: #0000FF; ">case</span><span style="color: #000000; "> Rgt:<br />                                {<br />                                                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (buf[s] </span><span style="color: #000000; ">==</span><span style="color: #000000; "> </span><span style="color: #000000; ">'</span><span style="color: #000000; ">(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)<br />                                                                putchar(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">), print(s</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, t), putchar(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)</span><span style="color: #000000; ">'</span><span style="color: #000000; ">);<br />                                                </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />                                                                putchar(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">[</span><span style="color: #000000; ">'</span><span style="color: #000000; ">), print(s</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, t), putchar(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">]</span><span style="color: #000000; ">'</span><span style="color: #000000; ">);<br />                                                </span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />                                }<br />                                </span><span style="color: #0000FF; ">case</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">:<br />                                {<br />                                                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> s; i </span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; "> t; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />                                                                putchar(buf[i]);<br />                                                </span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />                                }<br />                                </span><span style="color: #0000FF; ">default</span><span style="color: #000000; ">:<br />                                {<br />                                                print(s, p[s][t]), print(p[s][t]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, t);<br />                                                </span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />                                }<br />                }<br />}<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> main()<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> n;<br /><br />                buf[</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; ">0</span><span style="color: #000000; ">, scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%s</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, buf</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />                memset(f, </span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, </span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(f));<br />                memset(p, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, </span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(p));<br />                n </span><span style="color: #000000; ">=</span><span style="color: #000000; "> strlen(buf</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />                dp(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, n), print(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, n), putchar(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">\n</span><span style="color: #000000; ">'</span><span style="color: #000000; ">);<br /><br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></span></div><br /><img src ="http://www.cppblog.com/CSniper/aggbug/193163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CSniper/" target="_blank">yajunw</a> 2012-10-11 13:57 <a href="http://www.cppblog.com/CSniper/archive/2012/10/11/193163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[DP] PKU 1181 棋盘分割</title><link>http://www.cppblog.com/CSniper/archive/2012/10/11/193160.html</link><dc:creator>yajunw</dc:creator><author>yajunw</author><pubDate>Thu, 11 Oct 2012 04:14:00 GMT</pubDate><guid>http://www.cppblog.com/CSniper/archive/2012/10/11/193160.html</guid><wfw:comment>http://www.cppblog.com/CSniper/comments/193160.html</wfw:comment><comments>http://www.cppblog.com/CSniper/archive/2012/10/11/193160.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CSniper/comments/commentRss/193160.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CSniper/services/trackbacks/193160.html</trackback:ping><description><![CDATA[http://poj.org/problem?id=1191<br />dp<span style="color: #000000; "></span><span style="color: #000000; "><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 /><br /># define M (</span><span style="color: #000000; ">8</span><span style="color: #000000; "> </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">3</span><span style="color: #000000; ">)<br /># define N (</span><span style="color: #000000; ">14</span><span style="color: #000000; "> </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">3</span><span style="color: #000000; ">)<br /># define INF </span><span style="color: #000000; ">1000000000</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> n, m </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">8</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> a[M][M];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> s[M][M];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> f[N][M][M][M][M];<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> Min(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> y) {<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> x</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">y </span><span style="color: #000000; ">?</span><span style="color: #000000; "> x:y;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> cal(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x1, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> y1, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x2, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> y2)<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> ret </span><span style="color: #000000; ">=</span><span style="color: #000000; "> s[x2][y2]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">s[x1</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][y1</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[x1</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][y2]</span><span style="color: #000000; ">-</span><span style="color: #000000; ">s[x2][y1</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> ret </span><span style="color: #000000; ">*</span><span style="color: #000000; "> ret;<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> pre(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">)<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i, j, t;<br />                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</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; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />                                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (j </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">; j </span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; "> m; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">j)<br />                                                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][j]);<br />                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</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; "> N; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />                                s[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> s[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">][i] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</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; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />                {<br />                                t </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />                                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (j </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">; j </span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; "> m; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">j)<br />                                {<br />                                                t </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> a[i][j];<br />                                                s[i][j] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> t </span><span style="color: #000000; ">+</span><span style="color: #000000; "> s[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][j];<br />                                }<br />                }<br />                memset(f, </span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, </span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(f));<br />}<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> dp(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> k, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x1, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> y1, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x2, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> y2)<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i, j;<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> </span><span style="color: #000000; ">&amp;</span><span style="color: #000000; "> ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> f[k][x1][y1][x2][y2];<br />                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (ans </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> </span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)</span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> ans;<br />                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (k </span><span style="color: #000000; ">==</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">) </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> cal(x1, y1, x2, y2);<br />                ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> INF;<br />                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> x1; i </span><span style="color: #000000; ">&lt;</span><span style="color: #000000; "> x2; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />                                ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Min( ans, Min( dp(k</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, x1, y1, i, y2)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">cal(i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, y1, x2, y2),<br />                                                     dp(k</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, y1, x2, y2)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">cal(x1, y1, i, y2) ) );<br />                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (j </span><span style="color: #000000; ">=</span><span style="color: #000000; "> y1; j </span><span style="color: #000000; ">&lt;</span><span style="color: #000000; "> y2; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">j)<br />                                ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Min( ans, Min( dp(k</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, x1, y1, x2, j)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">cal(x1, j</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, x2, y2),<br />                                                     dp(k</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, x1, j</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, x2, y2)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">cal(x1, y1, x2, j) ) );<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> ans;<br />}<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> solve(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">)<br />{<br />                </span><span style="color: #0000FF; ">double</span><span style="color: #000000; "> ans;<br />                ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> ( </span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">*</span><span style="color: #000000; ">dp(n, </span><span style="color: #000000; ">1</span><span style="color: #000000; ">, </span><span style="color: #000000; ">1</span><span style="color: #000000; ">, </span><span style="color: #000000; ">8</span><span style="color: #000000; ">, </span><span style="color: #000000; ">8</span><span style="color: #000000; ">) )</span><span style="color: #000000; ">/</span><span style="color: #000000; ">( </span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">*</span><span style="color: #000000; ">n )<br />                      </span><span style="color: #000000; ">-</span><span style="color: #000000; "> (</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">*</span><span style="color: #000000; ">s[</span><span style="color: #000000; ">8</span><span style="color: #000000; ">][</span><span style="color: #000000; ">8</span><span style="color: #000000; ">]</span><span style="color: #000000; ">/</span><span style="color: #000000; ">n)</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">*</span><span style="color: #000000; ">s[</span><span style="color: #000000; ">8</span><span style="color: #000000; ">][</span><span style="color: #000000; ">8</span><span style="color: #000000; ">]</span><span style="color: #000000; ">/</span><span style="color: #000000; ">n);<br />                printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%.3f\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, sqrt(ans) );<br />}<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> main()<br />{<br />                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);<br />                pre();<br />                solve();<br /><br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></span></div><br /></span><img src ="http://www.cppblog.com/CSniper/aggbug/193160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CSniper/" target="_blank">yajunw</a> 2012-10-11 12:14 <a href="http://www.cppblog.com/CSniper/archive/2012/10/11/193160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>problem 1008 Chengdu</title><link>http://www.cppblog.com/CSniper/archive/2012/09/16/190889.html</link><dc:creator>yajunw</dc:creator><author>yajunw</author><pubDate>Sun, 16 Sep 2012 09:06:00 GMT</pubDate><guid>http://www.cppblog.com/CSniper/archive/2012/09/16/190889.html</guid><wfw:comment>http://www.cppblog.com/CSniper/comments/190889.html</wfw:comment><comments>http://www.cppblog.com/CSniper/archive/2012/09/16/190889.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CSniper/comments/commentRss/190889.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CSniper/services/trackbacks/190889.html</trackback:ping><description><![CDATA[1008<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; ">cstdio</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /># include </span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">algorithm</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /><br /># define N </span><span style="color: #000000; ">100005</span><span style="color: #000000; "><br /><br />typedef __int64 LL;<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> n;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> a[N], b[N], r[N];<br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; "> cmp(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> y)<br />{<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> a[x]</span><span style="color: #000000; ">-</span><span style="color: #000000; ">b[y] </span><span style="color: #000000; ">==</span><span style="color: #000000; "> a[y]</span><span style="color: #000000; ">-</span><span style="color: #000000; ">b[x] </span><span style="color: #000000; ">?</span><span style="color: #000000; "> a[x]</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">a[y] : a[x]</span><span style="color: #000000; ">-</span><span style="color: #000000; ">b[y]</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">a[y]</span><span style="color: #000000; ">-</span><span style="color: #000000; ">b[x];<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> main()<br />{<br />                freopen(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">in.txt</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">r</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, stdin);<br /><br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i;<br />                LL w, ans;<br />                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (</span><span style="color: #000000; ">~</span><span style="color: #000000; ">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))<br />                {<br />                                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</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; "> n; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />                                                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; ">a[i], </span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">b[i]), r[i] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> i;<br />                                std::sort(r, r</span><span style="color: #000000; ">+</span><span style="color: #000000; ">n, cmp);<br />                                w </span><span style="color: #000000; ">=</span><span style="color: #000000; "> a[ r[n</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">] ];<br />                                ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />                                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> n</span><span style="color: #000000; ">-</span><span style="color: #000000; ">2</span><span style="color: #000000; ">; i </span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">; </span><span style="color: #000000; ">--</span><span style="color: #000000; ">i)<br />                                {<br />                                                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (ans </span><span style="color: #000000; ">&lt;</span><span style="color: #000000; "> w</span><span style="color: #000000; ">-</span><span style="color: #000000; ">(LL)b[ r[i] ]) ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> w </span><span style="color: #000000; ">-</span><span style="color: #000000; "> (LL)b[ r[i] ];<br />                                                w </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> (LL)a[ r[i] ];<br />                                }<br />                                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 />                }<br /><br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></span></div><br /><img src ="http://www.cppblog.com/CSniper/aggbug/190889.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CSniper/" target="_blank">yajunw</a> 2012-09-16 17:06 <a href="http://www.cppblog.com/CSniper/archive/2012/09/16/190889.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2011 South Pacific Regional Contest E -- RealPhobia</title><link>http://www.cppblog.com/CSniper/archive/2012/09/15/190783.html</link><dc:creator>yajunw</dc:creator><author>yajunw</author><pubDate>Sat, 15 Sep 2012 09:26:00 GMT</pubDate><guid>http://www.cppblog.com/CSniper/archive/2012/09/15/190783.html</guid><wfw:comment>http://www.cppblog.com/CSniper/comments/190783.html</wfw:comment><comments>http://www.cppblog.com/CSniper/archive/2012/09/15/190783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CSniper/comments/commentRss/190783.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CSniper/services/trackbacks/190783.html</trackback:ping><description><![CDATA[
		<p>
		</p>
		<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; ">
				</span># include &lt;stdio.h&gt;<br /><br />typedef long long int LL;<br /><br />/***************************************/<br />LL Min(LL x, LL y)<br />{<br />                return x &lt; y ? x : y;<br />}<br />LL Max(LL x, LL y)<br />{<br />                return x &gt; y ? x : y;<br />}<br />LL gcd(LL x, LL y)<br />{<br />                if (!y) return x;<br />                return gcd(y, x%y);<br />}<br />LL ex_gcd(LL a,LL b,LL &amp;x,LL &amp;y)<br />{<br />                if(b==0)<br />                {<br />                                x=1;<br />                                y=0;<br />                                return a;<br />                }<br />                LL g,t;<br />                g=ex_gcd(b,a%b,x,y);<br />                t=x;<br />                x=y;<br />                y=t-a/b*y;<br />                return g;<br />}<br />LL niyuan(LL b,LL p)<br />{<br />                LL x,y;<br />                ex_gcd(b,p,x,y);<br />                return x=(x%p+p)%p;<br />}<br />/***************************************/<br />struct frac<br />{<br />                LL n, d;<br />} ;<br />LL A, B, C, D;<br />LL LLabs(LL x)<br />{<br />                return x&gt;0 ? x:-x;<br />}<br />void slim(frac &amp;x)<br />{<br />                LL tmp = LLabs(gcd(x.d, x.n));<br />                x.d /= tmp;<br />                x.n /= tmp;<br />}<br />frac dif(frac x, frac y)<br />{<br />                frac z;<br />                z.d = x.d * y.d;<br />                z.n = LLabs(x.n*y.d-x.d*y.n);<br />                slim(z);<br />                return z;<br />}<br />int cmp(frac x, frac y)<br />{<br />                return x.n*y.d - x.d*y.n&gt;0 ? 1:0;<br />}<br />frac cal(frac x, frac y, frac BA)<br />{<br />                return cmp(dif(x, BA), dif(y, BA)) ? y:x;<br />}<br />void solve(void)<br />{<br />                frac BA;<br />                BA.n = A, BA.d = B;<br />                LL n1 = niyuan(B, A);<br />                if (n1 == 0) n1 = A;<br />                LL d1 = (B*n1-1) / A;<br />                LL d2 = niyuan(A, B);<br />                if (d2 == 0) d2 = B;<br />                LL n2 = (A*d2-1) / B;<br />                frac a, b;<br />                a.n = n1, a.d = d1;<br />                b.n = n2, b.d = d2;<br />                slim(a), slim(b);<br />                frac ans = cal(a, b, BA);<br />                printf("%lld/%lld\n", ans.n, ans.d);<br />}<br />/***************************************/<br />int main()<br />{<br />                freopen("in.txt", "r", stdin);<br /><br />                int T;<br />                scanf("%d", &amp;T);<br />                while (T--)<br />                {<br />                                scanf("%lld/%lld", &amp;A, &amp;B);<br />                                LL tmp = gcd(A, B);<br />                                if (tmp != 1)<br />                                {<br />                                                printf("%lld/%lld\n", A/tmp, B/tmp);<br />                                }<br />                                else solve();<br />                }<br /><br />                return 0;<br />}<br /><br /></div>
		<p>Bert is a programmer with a real fear of floating point arithmetic. Bert has quite
successfully used rational numbers to write his programs but he does not like it when the
denominator grows large.

</p>
		<p>
Your task is to help Bert by writing a program that decreases the denominator of a
rational number, whilst introducing the smallest error possible. For a rational number <span class="MATH"><i>A</i>/<i>B</i></span>,
where <span class="MATH"><i>B</i> &gt; 2</span> and <span class="MATH">0 &lt; <i>A</i> &lt; <i>B</i></span>, your program needs to identify a rational number <span class="MATH"><i>C</i>/<i>D</i></span> such
that:

</p>
		<p>
		</p>
		<ol>
				<li>
						<span class="MATH">0 &lt; <i>C</i> &lt; <i>D</i> &lt; <i>B</i></span>, and
</li>
				<li>the error 
<span class="MATH">| <i>A</i>/<i>B</i> - <i>C</i>/<i>D</i>|</span> is the minimum over all possible values of <span class="MATH"><i>C</i></span> and <span class="MATH"><i>D</i></span>, and
</li>
				<li>
						<span class="MATH">
								<i>D</i>
						</span> is the smallest such positive integer.
</li>
		</ol>
		<div style="display: block;" class="hiddable" id="vj_input">
				<p class="pst">Input</p>
				<div class="textBG">
						<p>
The input starts with an integer <span class="MATH"><i>K</i></span> (
<span class="MATH">1<img src="http://livearchive.onlinejudge.org/external/56/5686img1.png" alt="$ \le$" align="MIDDLE" border="0" height="31" width="18" /><i>K</i><img src="http://livearchive.onlinejudge.org/external/56/5686img1.png" alt="$ \le$" align="MIDDLE" border="0" height="31" width="18" />1000</span>) that represents the number of cases on
a line by itself. Each of the following <span class="MATH"><i>K</i></span> lines describes one of the cases and consists of a
fraction formatted as two integers, <span class="MATH"><i>A</i></span> and <span class="MATH"><i>B</i></span>, separated by `<tt>/</tt>' such that:

</p>
						<p>
						</p>
						<ol>
								<li>
										<span class="MATH">
												<i>B</i>
										</span> is a 32 bit integer strictly greater than 2, and
</li>
								<li>
										<span class="MATH">0 &lt; <i>A</i> &lt; <i>B</i></span>
								</li>
						</ol>
				</div>
		</div>
		<div style="display: block;" class="hiddable" id="vj_output">
				<p class="pst">Output</p>
				<div class="textBG">
						<p>
For each case, the output consists of a fraction on a line by itself. The fraction should
be formatted as two integers separated by `<tt>/</tt>'.

</p>
				</div>
		</div>
		<div style="display: block;" class="hiddable" id="vj_sampleInput">
				<p class="pst">Sample Input</p>
				<div class="textBG">
						<p>
						</p>
						<pre>3
1/4
2/3
13/21
</pre>
				</div>
		</div>
		<p class="pst">Sample Output</p>
		<p>
		</p>
		<pre>1/3
1/2
8/13
</pre>
<img src ="http://www.cppblog.com/CSniper/aggbug/190783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CSniper/" target="_blank">yajunw</a> 2012-09-15 17:26 <a href="http://www.cppblog.com/CSniper/archive/2012/09/15/190783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDOJ 3641 Treasure Hunting</title><link>http://www.cppblog.com/CSniper/archive/2012/09/08/189946.html</link><dc:creator>yajunw</dc:creator><author>yajunw</author><pubDate>Sat, 08 Sep 2012 08:01:00 GMT</pubDate><guid>http://www.cppblog.com/CSniper/archive/2012/09/08/189946.html</guid><wfw:comment>http://www.cppblog.com/CSniper/comments/189946.html</wfw:comment><comments>http://www.cppblog.com/CSniper/archive/2012/09/08/189946.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CSniper/comments/commentRss/189946.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CSniper/services/trackbacks/189946.html</trackback:ping><description><![CDATA[给出 2n 个数，求最大的 x 满足 x!%M = 0 ，其中 M = a1^b1*a2^b2*a3^b3…*an^bn 。<br /><div style="display: block;" class="hiddable" id="vj_input"><p class="pst">Input</p><div class="textBG"><div class="panel_content">In the first line is an integer T (1&lt;=T&lt;=50) indicating the number of test cases.<br />Each
 test case begins with an integer n (1&lt;=n&lt;=100), then followed n 
lines. Each line contains two numbers ai and bi (1 &lt;= ai &lt;= 100, 
1&lt;=bi&lt;=10000000000000)<br /></div></div></div><div style="display: block;" class="hiddable" id="vj_output"><p class="pst">Output</p><div class="textBG"><div class="panel_content">For each test case output the result x in one line. <br /><br />Source <br />2010 Asia Regional Hangzhou Site Online Contest<br /></div></div></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 /><br /># define N </span><span style="color: #000000; ">101</span><span style="color: #000000; "><br />typedef </span><span style="color: #0000FF; ">long</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">long</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> LL;<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> n;<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; ">int</span><span style="color: #000000; "> p[</span><span style="color: #000000; ">50</span><span style="color: #000000; ">], top </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> isPrime(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x)<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i;<br />                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (x</span><span style="color: #000000; ">%</span><span style="color: #000000; ">2</span><span style="color: #000000; ">==</span><span style="color: #000000; ">0</span><span style="color: #000000; ">) </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> x</span><span style="color: #000000; ">==</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (x</span><span style="color: #000000; ">%</span><span style="color: #000000; ">3</span><span style="color: #000000; ">==</span><span style="color: #000000; ">0</span><span style="color: #000000; ">) </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> x</span><span style="color: #000000; ">==</span><span style="color: #000000; ">3</span><span style="color: #000000; ">;<br />                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (x</span><span style="color: #000000; ">%</span><span style="color: #000000; ">5</span><span style="color: #000000; ">==</span><span style="color: #000000; ">0</span><span style="color: #000000; ">) </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> x</span><span style="color: #000000; ">==</span><span style="color: #000000; ">5</span><span style="color: #000000; ">;<br />                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">7</span><span style="color: #000000; ">; i </span><span style="color: #000000; ">&lt;</span><span style="color: #000000; "> x; i </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> </span><span style="color: #000000; ">5</span><span style="color: #000000; ">)<br />                                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (x</span><span style="color: #000000; ">%</span><span style="color: #000000; ">i </span><span style="color: #000000; ">==</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">) </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />}<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> pre(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">)<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i;<br />                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">2</span><span style="color: #000000; ">; i </span><span style="color: #000000; ">&lt;</span><span style="color: #000000; "> N; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />                                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (isPrime(i)) p[top</span><span style="color: #000000; ">++</span><span style="color: #000000; ">] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> i;<br />}<br /></span><span style="color: #008000; ">/*</span><span style="color: #008000; ">*****************************************************</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />LL pn[</span><span style="color: #000000; ">50</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> init(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">)<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i, j, x;<br />                LL cnt;<br />                LL num;<br />                memset(pn, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, </span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(pn));<br />                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);<br />                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</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; "> n; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />                {<br />                                scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d%I64d</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; ">num);<br />                                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (j </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">; j </span><span style="color: #000000; ">&lt;</span><span style="color: #000000; "> top; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">j)<br />                                {<br />                                                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (x</span><span style="color: #000000; ">%</span><span style="color: #000000; ">p[j] </span><span style="color: #000000; ">==</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />                                                {<br />                                                                cnt </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />                                                                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (x</span><span style="color: #000000; ">%</span><span style="color: #000000; ">p[j]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">0</span><span style="color: #000000; ">) </span><span style="color: #000000; ">++</span><span style="color: #000000; ">cnt, x</span><span style="color: #000000; ">/=</span><span style="color: #000000; ">p[j];<br />                                                                pn[j] </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> cnt</span><span style="color: #000000; ">*</span><span style="color: #000000; ">num;<br />                                                }<br />                                }<br />                }<br />}<br />LL Max(LL x, LL y)<br />{<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> x</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">y </span><span style="color: #000000; ">?</span><span style="color: #000000; "> x:y;<br />}<br /><br />LL mypow(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> pr, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> cnt)<br />{<br />                LL ret </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (cnt </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">) </span><span style="color: #000000; ">--</span><span style="color: #000000; ">cnt, ret </span><span style="color: #000000; ">*=</span><span style="color: #000000; "> pr;<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> ret;<br />}<br /><br />LL cal(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> pr, LL tot)<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> tmp;<br />                LL ppow </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, temp;<br />                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (tot </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />                {<br />                                tmp </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">)floor(log(tot</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(pr</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; ">)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">log(pr))</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />                                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> ((mypow(pr, tmp)</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; ">(pr</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">) </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> tot) </span><span style="color: #000000; ">--</span><span style="color: #000000; ">tmp;<br />                                temp </span><span style="color: #000000; ">=</span><span style="color: #000000; "> mypow(pr, tmp);<br />                                ppow </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> temp;<br />                                tot </span><span style="color: #000000; ">-=</span><span style="color: #000000; "> (temp</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; ">(pr</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />                }<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> ppow;<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> solve(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">)<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i;<br />                LL ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</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; "> top; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i) </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (pn[i] </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />                                                ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Max(ans, cal(p[i], pn[i]));<br />                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 />}<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> main()<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> T;<br />                pre();<br />                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; ">T);<br />                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (T</span><span style="color: #000000; ">--</span><span style="color: #000000; ">) init(), solve();<br /><br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></span></div><br /><img src ="http://www.cppblog.com/CSniper/aggbug/189946.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CSniper/" target="_blank">yajunw</a> 2012-09-08 16:01 <a href="http://www.cppblog.com/CSniper/archive/2012/09/08/189946.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[树状数组] PKU 2299 Ultra-QuickSort</title><link>http://www.cppblog.com/CSniper/archive/2012/09/02/189160.html</link><dc:creator>yajunw</dc:creator><author>yajunw</author><pubDate>Sun, 02 Sep 2012 09:53:00 GMT</pubDate><guid>http://www.cppblog.com/CSniper/archive/2012/09/02/189160.html</guid><wfw:comment>http://www.cppblog.com/CSniper/comments/189160.html</wfw:comment><comments>http://www.cppblog.com/CSniper/archive/2012/09/02/189160.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CSniper/comments/commentRss/189160.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CSniper/services/trackbacks/189160.html</trackback:ping><description><![CDATA[维护名次即可（不需要离散化）。<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; ">algorithm</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; "> std;<br /><br /># define N </span><span style="color: #000000; ">500005</span><span style="color: #000000; "><br /><br />typedef </span><span style="color: #0000FF; ">long</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">long</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> LL;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> n;<br />LL a[N];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> r[N], s[N], c[N];<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; ">int</span><span style="color: #000000; "> getsum(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x)<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> ret </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (x </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">) ret </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> c[x], x  </span><span style="color: #000000; ">-=</span><span style="color: #000000; "> x</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">x);<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> ret;<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> inc(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x)<br />{<br />                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (x </span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; "> n) </span><span style="color: #000000; ">++</span><span style="color: #000000; "> c[x], x </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> x</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">x);<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; ">bool</span><span style="color: #000000; "> cmp(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> y)<br />{<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> a[x] </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> a[y];<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> main()<br />{<br />                LL ans;<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i;<br />                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (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), n)<br />                {<br />                                memset(c</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, </span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(c[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">n);<br />                                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</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; "> n; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />                                                r[i] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> i, scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%lld</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">a[i]);<br />                                sort(r, r</span><span style="color: #000000; ">+</span><span style="color: #000000; ">n, cmp);<br />                                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</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; "> n; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i) s[r[i]] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> i;<br />                                ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />                                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</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; "> n; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />                                                ans </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> getsum(s[i]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">), inc(s[i]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />                                printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%lld\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, ans);<br />                }<br /><br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}</span></div><br /><img src ="http://www.cppblog.com/CSniper/aggbug/189160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CSniper/" target="_blank">yajunw</a> 2012-09-02 17:53 <a href="http://www.cppblog.com/CSniper/archive/2012/09/02/189160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[树状数组] PKU 2155 Matrix</title><link>http://www.cppblog.com/CSniper/archive/2012/09/02/189157.html</link><dc:creator>yajunw</dc:creator><author>yajunw</author><pubDate>Sun, 02 Sep 2012 09:29:00 GMT</pubDate><guid>http://www.cppblog.com/CSniper/archive/2012/09/02/189157.html</guid><wfw:comment>http://www.cppblog.com/CSniper/comments/189157.html</wfw:comment><comments>http://www.cppblog.com/CSniper/archive/2012/09/02/189157.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CSniper/comments/commentRss/189157.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CSniper/services/trackbacks/189157.html</trackback:ping><description><![CDATA[树状数组，inc(x,y)表示对[x-n][y-n]的区域执行一次反转操作，这样，getsum(x,y)将总会包含对[x][y]的操作，即为[x][y]的反转总次数，根据奇偶性判断当前状态。<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 /><br /># define N </span><span style="color: #000000; ">1005</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> n, c[N][N];<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> clr(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> nn)<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i;<br />                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</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; "> nn; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />                                memset(c[i]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, </span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(c[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">nn);<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; "> inc(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> y)<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> t;<br />                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (x </span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; "> n)<br />                {<br />                                t </span><span style="color: #000000; ">=</span><span style="color: #000000; "> y;<br />                                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (t </span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; "> n) </span><span style="color: #000000; ">++</span><span style="color: #000000; "> c[x][t], t </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> t</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">t);</span><span style="color: #008000; ">//</span><span style="color: #008000; "> printf("%d\n", t);</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">                                x </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> x</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">x);<br />                }<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> getsum(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> y)<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> t, ret </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (x </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />                {<br />                                t </span><span style="color: #000000; ">=</span><span style="color: #000000; "> y;<br />                                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (t </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">) ret </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> c[x][t], t </span><span style="color: #000000; ">-=</span><span style="color: #000000; "> t</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">t);</span><span style="color: #008000; ">//</span><span style="color: #008000; "> printf("%d\n", t);</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">                                x </span><span style="color: #000000; ">-=</span><span style="color: #000000; "> x</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">x);<br />                }<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> ret;<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; ">int</span><span style="color: #000000; "> main()<br />{<br />                </span><span style="color: #0000FF; ">char</span><span style="color: #000000; "> ins[</span><span style="color: #000000; ">3</span><span style="color: #000000; ">];<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> X, T, x0, y0, x1, y1;<br />                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 />                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (X</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />                {<br />                                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; ">T), clr(n);<br />                                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (T</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />                                {<br />                                                scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%s%d%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, ins, </span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">x0, </span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">y0);<br />                                                </span><span style="color: #0000FF; ">switch</span><span style="color: #000000; ">(ins[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">])<br />                                                {<br />                                                                </span><span style="color: #0000FF; ">case</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 />                                                                {<br />                                                                                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; ">x1, </span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">y1);<br />                                                                                inc(x0, y0);<br />                                                                                inc(x0, y1</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />                                                                                inc(x1</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, y0);<br />                                                                                inc(x1</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, y1</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />                                                                                </span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />                                                                }<br />                                                                </span><span style="color: #0000FF; ">case</span><span style="color: #000000; "> </span><span style="color: #000000; ">'</span><span style="color: #000000; ">Q</span><span style="color: #000000; ">'</span><span style="color: #000000; ">: puts((getsum(x0, y0)</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">0x1</span><span style="color: #000000; ">) </span><span style="color: #000000; ">?</span><span style="color: #000000; "> </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; ">"</span><span style="color: #000000; ">0</span><span style="color: #000000; ">"</span><span style="color: #000000; ">); </span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />                                                }<br />                                }<br />                                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (X) putchar(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">\n</span><span style="color: #000000; ">'</span><span style="color: #000000; ">);<br />                }<br /><br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}</span></div><br /><img src ="http://www.cppblog.com/CSniper/aggbug/189157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CSniper/" target="_blank">yajunw</a> 2012-09-02 17:29 <a href="http://www.cppblog.com/CSniper/archive/2012/09/02/189157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[树状数组] PKU 3067 Japan</title><link>http://www.cppblog.com/CSniper/archive/2012/09/02/189134.html</link><dc:creator>yajunw</dc:creator><author>yajunw</author><pubDate>Sun, 02 Sep 2012 05:53:00 GMT</pubDate><guid>http://www.cppblog.com/CSniper/archive/2012/09/02/189134.html</guid><wfw:comment>http://www.cppblog.com/CSniper/comments/189134.html</wfw:comment><comments>http://www.cppblog.com/CSniper/archive/2012/09/02/189134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CSniper/comments/commentRss/189134.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CSniper/services/trackbacks/189134.html</trackback:ping><description><![CDATA[结果用 long long。<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; ">algorithm</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; "> std;<br /><br /># define B </span><span style="color: #000000; ">1005</span><span style="color: #000000; "><br /># define N </span><span style="color: #000000; ">1000005</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> n, m, k, a[B];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> r[N], x[N], y[N];<br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; "> cmp(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> j)<br />{<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> x[i]</span><span style="color: #000000; ">^</span><span style="color: #000000; ">x[j] </span><span style="color: #000000; ">?</span><span style="color: #000000; "> x[i]</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">x[j] : y[i]</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">y[j];<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; ">int</span><span style="color: #000000; "> getsum(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x)<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> ret </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (x </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">) ret </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> a[x], x </span><span style="color: #000000; ">-=</span><span style="color: #000000; "> x</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">x);<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> ret;<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> inc(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x)<br />{<br />                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (x </span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; "> m) </span><span style="color: #000000; ">++</span><span style="color: #000000; "> a[x], x </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> x</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">x);<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; ">int</span><span style="color: #000000; "> main()<br />{<br />                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> ii, T, i, xx;<br />                </span><span style="color: #0000FF; ">long</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">long</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> ans;<br /><br />                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; ">T);<br />                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (ii </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">; ii </span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; "> T; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">ii)<br />                {<br />                                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; ">k);<br />                                memset(a</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, </span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(a[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">])</span><span style="color: #000000; ">*</span><span style="color: #000000; ">m);<br />                                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</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; "> k; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />                                                r[i] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> i, 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[i], </span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">y[i]);<br />                                sort(r, r</span><span style="color: #000000; ">+</span><span style="color: #000000; ">k, cmp);<br />                                ans </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />                                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</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; "> k; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />                                                ans </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> getsum(y[r[i]]</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">), inc(y[r[i]]);<br />                                printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Test case %d: %lld\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, ii, ans);<br />                }<br /><br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></span></div><br /><img src ="http://www.cppblog.com/CSniper/aggbug/189134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CSniper/" target="_blank">yajunw</a> 2012-09-02 13:53 <a href="http://www.cppblog.com/CSniper/archive/2012/09/02/189134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[树状数组] PKU 2481 Cows</title><link>http://www.cppblog.com/CSniper/archive/2012/09/02/189120.html</link><dc:creator>yajunw</dc:creator><author>yajunw</author><pubDate>Sun, 02 Sep 2012 03:51:00 GMT</pubDate><guid>http://www.cppblog.com/CSniper/archive/2012/09/02/189120.html</guid><wfw:comment>http://www.cppblog.com/CSniper/comments/189120.html</wfw:comment><comments>http://www.cppblog.com/CSniper/archive/2012/09/02/189120.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CSniper/comments/commentRss/189120.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CSniper/services/trackbacks/189120.html</trackback:ping><description><![CDATA[
		<div style="background-color:#eeeeee;font-size:13px;BORDER:1px solid #CCCCCC;PADDING-RIGHT: 5px;PADDING-BOTTOM: 4px;PADDING-left: 4px;PADDING-TOP: 4px;WIDTH: 98%;word-break:break-all">
				<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
				<span style="color: #008080; "> 1</span> <span style="color: #000000; "># include </span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cstdio</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 2</span> <span style="color: #000000; "># include </span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cstring</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 3</span> <span style="color: #000000; "># include </span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">algorithm</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 4</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">using</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; "> std;<br /></span><span style="color: #008080; "> 5</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 6</span> <span style="color: #000000; "># define B </span><span style="color: #000000; ">100005</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 7</span> <span style="color: #000000; "># define N </span><span style="color: #000000; ">100005</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 8</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 9</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; "> Intv {</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> s, e;};<br /></span><span style="color: #008080; ">10</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">11</span> <span style="color: #000000; ">Intv c[N];<br /></span><span style="color: #008080; ">12</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> n, a[B], r[N], le[N];<br /></span><span style="color: #008080; ">13</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">14</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; "> cmp(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x, </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> y)<br /></span><span style="color: #008080; ">15</span> <span style="color: #000000; ">{<br /></span><span style="color: #008080; ">16</span> <span style="color: #000000; ">                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (c[x].s </span><span style="color: #000000; ">==</span><span style="color: #000000; "> c[y].s) </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> c[x].e </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> c[y].e;<br /></span><span style="color: #008080; ">17</span> <span style="color: #000000; ">                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> c[x].s </span><span style="color: #000000; ">&lt;</span><span style="color: #000000; "> c[y].s;<br /></span><span style="color: #008080; ">18</span> <span style="color: #000000; ">}<br /></span><span style="color: #008080; ">19</span> <span style="color: #000000; "></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: #008080; ">20</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> getsum(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x)<br /></span><span style="color: #008080; ">21</span> <span style="color: #000000; ">{<br /></span><span style="color: #008080; ">22</span> <span style="color: #000000; ">                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> ret </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">23</span> <span style="color: #000000; ">                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (x </span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">) ret </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> a[x], x </span><span style="color: #000000; ">-=</span><span style="color: #000000; "> x</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">x);<br /></span><span style="color: #008080; ">24</span> <span style="color: #000000; ">                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> ret;<br /></span><span style="color: #008080; ">25</span> <span style="color: #000000; ">}<br /></span><span style="color: #008080; ">26</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> inc(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x)<br /></span><span style="color: #008080; ">27</span> <span style="color: #000000; ">{<br /></span><span style="color: #008080; ">28</span> <span style="color: #000000; ">                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (x </span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; "> B) </span><span style="color: #000000; ">++</span><span style="color: #000000; ">a[x], x </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> x</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">x);<br /></span><span style="color: #008080; ">29</span> <span style="color: #000000; ">}<br /></span><span style="color: #008080; ">30</span> <span style="color: #000000; "></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: #008080; ">31</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> main()<br /></span><span style="color: #008080; ">32</span> <span style="color: #000000; ">{<br /></span><span style="color: #008080; ">33</span> <span style="color: #000000; ">                </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i, n, x;<br /></span><span style="color: #008080; ">34</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">35</span> <span style="color: #000000; ">                </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (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), n)<br /></span><span style="color: #008080; ">36</span> <span style="color: #000000; ">                {<br /></span><span style="color: #008080; ">37</span> <span style="color: #000000; ">                                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 /></span><span style="color: #008080; ">38</span> <span style="color: #000000; ">                                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</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; "> n; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br /></span><span style="color: #008080; ">39</span> <span style="color: #000000; ">                                                r[i] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> i, 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; ">c[i].s, </span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">c[i].e);<br /></span><span style="color: #008080; ">40</span> <span style="color: #000000; ">                                sort(r, r</span><span style="color: #000000; ">+</span><span style="color: #000000; ">n, cmp);<br /></span><span style="color: #008080; ">41</span> <span style="color: #000000; ">                                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</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; "> n; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br /></span><span style="color: #008080; ">42</span> <span style="color: #000000; ">                                {<br /></span><span style="color: #008080; ">43</span> <span style="color: #000000; ">                                                x </span><span style="color: #000000; ">=</span><span style="color: #000000; "> c[r[i]].e </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">, inc(x);<br /></span><span style="color: #008080; ">44</span> <span style="color: #000000; ">                                                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; "> c[r[i]].e</span><span style="color: #000000; ">==</span><span style="color: #000000; ">c[r[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]].e </span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; "> c[r[i]].s</span><span style="color: #000000; ">==</span><span style="color: #000000; ">c[r[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]].s)<br /></span><span style="color: #008080; ">45</span> <span style="color: #000000; ">                                                                le[r[i]] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> le[r[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]];<br /></span><span style="color: #008080; ">46</span> <span style="color: #000000; ">                                                </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">47</span> <span style="color: #000000; ">                                                                le[r[i]] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">getsum(x</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">48</span> <span style="color: #000000; ">                                }<br /></span><span style="color: #008080; ">49</span> <span style="color: #000000; ">                                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (i </span><span style="color: #000000; ">=</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; "> n; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br /></span><span style="color: #008080; ">50</span> <span style="color: #000000; ">                                {<br /></span><span style="color: #008080; ">51</span> <span style="color: #000000; ">                                                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (i) putchar(</span><span style="color: #000000; ">'</span><span style="color: #000000; "> </span><span style="color: #000000; ">'</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">52</span> <span style="color: #000000; ">                                                printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, le[i]);<br /></span><span style="color: #008080; ">53</span> <span style="color: #000000; ">                                }<br /></span><span style="color: #008080; ">54</span> <span style="color: #000000; ">                                putchar(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">\n</span><span style="color: #000000; ">'</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">55</span> <span style="color: #000000; ">                }<br /></span><span style="color: #008080; ">56</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">57</span> <span style="color: #000000; ">                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">58</span> <span style="color: #000000; ">}<br /></span><span style="color: #008080; ">59</span> <span style="color: #000000; "></span></div>
<img src ="http://www.cppblog.com/CSniper/aggbug/189120.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CSniper/" target="_blank">yajunw</a> 2012-09-02 11:51 <a href="http://www.cppblog.com/CSniper/archive/2012/09/02/189120.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[树状数组] PKU 3252 Star</title><link>http://www.cppblog.com/CSniper/archive/2012/09/02/189099.html</link><dc:creator>yajunw</dc:creator><author>yajunw</author><pubDate>Sun, 02 Sep 2012 02:21:00 GMT</pubDate><guid>http://www.cppblog.com/CSniper/archive/2012/09/02/189099.html</guid><wfw:comment>http://www.cppblog.com/CSniper/comments/189099.html</wfw:comment><comments>http://www.cppblog.com/CSniper/archive/2012/09/02/189099.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/CSniper/comments/commentRss/189099.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/CSniper/services/trackbacks/189099.html</trackback:ping><description><![CDATA[
		<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 />
						<br />
				</span>
				<span style="color: #0000FF; ">int</span>
				<span style="color: #000000; "> a[</span>
				<span style="color: #000000; ">32005</span>
				<span style="color: #000000; ">], le[</span>
				<span style="color: #000000; ">15005</span>
				<span style="color: #000000; ">], n;<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; ">int</span>
				<span style="color: #000000; "> getsum(</span>
				<span style="color: #0000FF; ">int</span>
				<span style="color: #000000; "> x)<br />{<br />                </span>
				<span style="color: #0000FF; ">int</span>
				<span style="color: #000000; "> ret </span>
				<span style="color: #000000; ">=</span>
				<span style="color: #000000; "> </span>
				<span style="color: #000000; ">0</span>
				<span style="color: #000000; ">;<br />                </span>
				<span style="color: #0000FF; ">while</span>
				<span style="color: #000000; "> (x </span>
				<span style="color: #000000; ">&gt;</span>
				<span style="color: #000000; "> </span>
				<span style="color: #000000; ">0</span>
				<span style="color: #000000; ">) ret </span>
				<span style="color: #000000; ">+=</span>
				<span style="color: #000000; "> a[x], x </span>
				<span style="color: #000000; ">-=</span>
				<span style="color: #000000; "> (x</span>
				<span style="color: #000000; ">&amp;</span>
				<span style="color: #000000; ">(</span>
				<span style="color: #000000; ">-</span>
				<span style="color: #000000; ">x));<br />                </span>
				<span style="color: #0000FF; ">return</span>
				<span style="color: #000000; "> ret;<br />}<br /></span>
				<span style="color: #0000FF; ">void</span>
				<span style="color: #000000; "> inc(</span>
				<span style="color: #0000FF; ">int</span>
				<span style="color: #000000; "> x)<br />{<br />                </span>
				<span style="color: #0000FF; ">while</span>
				<span style="color: #000000; "> (x </span>
				<span style="color: #000000; ">&lt;=</span>
				<span style="color: #000000; "> </span>
				<span style="color: #000000; ">32005</span>
				<span style="color: #000000; ">) </span>
				<span style="color: #000000; ">++</span>
				<span style="color: #000000; "> a[x], x </span>
				<span style="color: #000000; ">+=</span>
				<span style="color: #000000; "> (x</span>
				<span style="color: #000000; ">&amp;</span>
				<span style="color: #000000; ">(</span>
				<span style="color: #000000; ">-</span>
				<span style="color: #000000; ">x));<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; ">int</span>
				<span style="color: #000000; "> main()<br />{<br />                </span>
				<span style="color: #0000FF; ">int</span>
				<span style="color: #000000; "> i, x, y;<br />                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);<br />                </span>
				<span style="color: #0000FF; ">for</span>
				<span style="color: #000000; "> (i </span>
				<span style="color: #000000; ">=</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; "> n; </span>
				<span style="color: #000000; ">++</span>
				<span style="color: #000000; ">i)<br />                {<br />                                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), </span>
				<span style="color: #000000; ">++</span>
				<span style="color: #000000; ">x;<br />                                </span>
				<span style="color: #000000; ">++</span>
				<span style="color: #000000; "> le[getsum(x)];<br />                                inc(x);<br />                }<br />                </span>
				<span style="color: #0000FF; ">for</span>
				<span style="color: #000000; "> (i </span>
				<span style="color: #000000; ">=</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; "> n; </span>
				<span style="color: #000000; ">++</span>
				<span style="color: #000000; ">i) printf(</span>
				<span style="color: #000000; ">"</span>
				<span style="color: #000000; ">%d\n</span>
				<span style="color: #000000; ">"</span>
				<span style="color: #000000; ">, le[i]);<br /><br />                </span>
				<span style="color: #0000FF; ">return</span>
				<span style="color: #000000; "> </span>
				<span style="color: #000000; ">0</span>
				<span style="color: #000000; ">;<br />}<br /></span>
		</div>
<img src ="http://www.cppblog.com/CSniper/aggbug/189099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/CSniper/" target="_blank">yajunw</a> 2012-09-02 10:21 <a href="http://www.cppblog.com/CSniper/archive/2012/09/02/189099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>