﻿<?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++博客-夜幻梦回-文章分类-线段树||splay树||树状数组</title><link>http://www.cppblog.com/Ylemzy/category/16413.html</link><description>足迹的足迹</description><language>zh-cn</language><lastBuildDate>Sun, 04 Sep 2011 07:12:01 GMT</lastBuildDate><pubDate>Sun, 04 Sep 2011 07:12:01 GMT</pubDate><ttl>60</ttl><item><title>pku 3667——线段树</title><link>http://www.cppblog.com/Ylemzy/articles/121225.html</link><dc:creator>火碳黑</dc:creator><author>火碳黑</author><pubDate>Sun, 25 Jul 2010 02:53:00 GMT</pubDate><guid>http://www.cppblog.com/Ylemzy/articles/121225.html</guid><wfw:comment>http://www.cppblog.com/Ylemzy/comments/121225.html</wfw:comment><comments>http://www.cppblog.com/Ylemzy/articles/121225.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Ylemzy/comments/commentRss/121225.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Ylemzy/services/trackbacks/121225.html</trackback:ping><description><![CDATA[		<br>
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;">
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
<span style="color: #000000;">#include&nbsp;</span>
<span style="color: #000000;">&lt;</span>
<span style="color: #000000;">stdio.h</span>
<span style="color: #000000;">&gt;</span>
<span style="color: #000000;">
<br>
</span>
<span style="color: #0000ff;">#define</span>
<span style="color: #000000;">&nbsp;maxn&nbsp;50005</span>
<span style="color: #000000;">
<br>
</span>
<span style="color: #0000ff;">struct</span>
<span style="color: #000000;">
<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #008000;">/*</span>
<span style="color: #008000;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;ml线段左边的最大空位，mr线段右边的最大空位，mm线段的最大空位，f线段最大空位的起始位置<br>&nbsp;&nbsp;&nbsp;&nbsp;cov线段是否被覆盖，ud线段被覆盖时，有没有往下将更改传递给孩子，len线段的长度<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #008000;">*/</span>
<span style="color: #000000;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;l,&nbsp;r,&nbsp;ml,&nbsp;mr,&nbsp;mm,&nbsp;f,&nbsp;cov,&nbsp;ud,&nbsp;len;<br>}tree[maxn&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">3</span>
<span style="color: #000000;">];<br></span>
<span style="color: #0000ff;">void</span>
<span style="color: #000000;">&nbsp;build&nbsp;(</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;l,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;r,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;i)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;tree[i].l&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;l,&nbsp;tree[i].r&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;r;<br>&nbsp;&nbsp;&nbsp;&nbsp;tree[i].ml&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i].mr&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i].len&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i].mm&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;r&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">&nbsp;l&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;tree[i].f&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i].l;<br>&nbsp;&nbsp;&nbsp;&nbsp;tree[i].cov&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i].ud&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(l&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;r)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;m&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;(l&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;r)&nbsp;</span>
<span style="color: #000000;">/</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;build&nbsp;(l,&nbsp;m&nbsp;,&nbsp;i&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">),&nbsp;build&nbsp;(m&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;r,&nbsp;i&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">);<br>}<br></span>
<span style="color: #0000ff;">void</span>
<span style="color: #000000;">&nbsp;down(</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;i)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #008000;">/*</span>
<span style="color: #008000;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;往下传递改节点的覆盖信息，如果往下传递，则更新孩子的数据<br>&nbsp;&nbsp;&nbsp;&nbsp;因为赖操作是针对已经确定被更新的线段的整块区域，所以不管孩子的在没修改之前的信息如何，都要被覆盖。孩子之前的信息已经没用了。<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #008000;">*/</span>
<span style="color: #000000;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[i].ud)</span>
<span style="color: #008000;">//</span>
<span style="color: #008000;">tree[i].ud为1时，表示该节点的覆盖信息还没传递到孩子，否则，表示该节点的信息已经传递给孩子了</span>
<span style="color: #008000;">
<br>
</span>
<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #008000;">//</span>
<span style="color: #008000;">对自己的更改</span>
<span style="color: #008000;">
<br>
</span>
<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[i].cov)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i].ml&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i].mr&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i].mm&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i].ml&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i].mr&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i].mm&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i].r&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">&nbsp;tree[i].l&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i].f&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i].l;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #008000;">//</span>
<span style="color: #008000;">对孩子的更改，由于对于赖操作的更细传递到该节点，如果要利用到孩子节点的信息，所以也要修改孩子的数据</span>
<span style="color: #008000;">
<br>
</span>
<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[i].l&nbsp;</span>
<span style="color: #000000;">!=</span>
<span style="color: #000000;">&nbsp;tree[i].r)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].cov&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].cov&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i].cov;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].ud&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].ud&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[i].cov)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].ml&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].mr&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].mm&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].ml&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].mr&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].mm&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].ml&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].mr&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].mm&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].r&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].l&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].f&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].l;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].ml&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].mr&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].mm&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].r&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].l&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].f&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].l;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i].ud&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span>
<span style="color: #0000ff;">void</span>
<span style="color: #000000;">&nbsp;insert(</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;l,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;r,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;i,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;cov)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[i].l&nbsp;</span>
<span style="color: #000000;">&gt;=</span>
<span style="color: #000000;">&nbsp;l&nbsp;</span>
<span style="color: #000000;">&amp;&amp;</span>
<span style="color: #000000;">&nbsp;tree[i].r&nbsp;</span>
<span style="color: #000000;">&lt;=</span>
<span style="color: #000000;">&nbsp;r)</span>
<span style="color: #008000;">//</span>
<span style="color: #008000;">线段在更新范围内，则只需将修改信息传递给孩子，并修改必要的数据后直接返回</span>
<span style="color: #008000;">
<br>
</span>
<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i].cov&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;cov;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i].ud&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;down(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;down(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;m&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;(tree[i].l&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;tree[i].r)&nbsp;</span>
<span style="color: #000000;">&gt;&gt;</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(l&nbsp;</span>
<span style="color: #000000;">&gt;</span>
<span style="color: #000000;">&nbsp;m)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(l,&nbsp;r,&nbsp;i&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;cov);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(m&nbsp;</span>
<span style="color: #000000;">&gt;=</span>
<span style="color: #000000;">&nbsp;r)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(l,&nbsp;r,&nbsp;i&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;,&nbsp;cov);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(l,&nbsp;r,&nbsp;i&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">,&nbsp;cov),&nbsp;insert(l,&nbsp;r,&nbsp;i&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;cov);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #008000;">//</span>
<span style="color: #008000;">由于改线段没被覆盖，数据的信息要通过孩子的信息来结合修改。</span>
<span style="color: #008000;">
<br>
</span>
<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;tree[i].ml&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].ml,&nbsp;tree[i].mr&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].mr;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].ml&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].len)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i].ml&nbsp;</span>
<span style="color: #000000;">+=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].ml;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].mr&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].len)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i].mr&nbsp;</span>
<span style="color: #000000;">+=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].mr;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;tree[i].mm&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].mm;<br>&nbsp;&nbsp;&nbsp;&nbsp;tree[i].f&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].f;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[i].mm&nbsp;</span>
<span style="color: #000000;">&lt;</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].mr&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].ml)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i].mm&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].mr&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].ml;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i].f&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].r&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].mr&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[i].mm&nbsp;</span>
<span style="color: #000000;">&lt;</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].mm)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i].mm&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].mm;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[i].f&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].f;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;find(</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;len,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;i)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;down(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[i].ml&nbsp;</span>
<span style="color: #000000;">&gt;=</span>
<span style="color: #000000;">&nbsp;len)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;tree[i].l;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].mm&nbsp;</span>
<span style="color: #000000;">&gt;=</span>
<span style="color: #000000;">&nbsp;len)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;find&nbsp;(len,&nbsp;i&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].mr&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].ml&nbsp;</span>
<span style="color: #000000;">&gt;=</span>
<span style="color: #000000;">&nbsp;len)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].r&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">&nbsp;tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].mr&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[i</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].mm&nbsp;</span>
<span style="color: #000000;">&gt;=</span>
<span style="color: #000000;">&nbsp;len)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;find&nbsp;(len,&nbsp;i&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;<br>}<br></span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;n,&nbsp;m,&nbsp;op,&nbsp;d,&nbsp;x,&nbsp;ans;<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">%d%d</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">n,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">m);<br>&nbsp;&nbsp;&nbsp;&nbsp;build&nbsp;(</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;n,&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">while</span>
<span style="color: #000000;">&nbsp;(m</span>
<span style="color: #000000;">--</span>
<span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">%d</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">op);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(op&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">%d</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">d);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;find(d,&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">%d\n</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">,&nbsp;ans);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(ans)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(ans,&nbsp;ans&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;d&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(op&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">%d%d</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">x,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">d);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(x,&nbsp;x&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;d&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;<br>}</span>
</div>
<br><img src ="http://www.cppblog.com/Ylemzy/aggbug/121225.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Ylemzy/" target="_blank">火碳黑</a> 2010-07-25 10:53 <a href="http://www.cppblog.com/Ylemzy/articles/121225.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 2104 K-th Number__线段树</title><link>http://www.cppblog.com/Ylemzy/articles/116237.html</link><dc:creator>火碳黑</dc:creator><author>火碳黑</author><pubDate>Mon, 24 May 2010 09:50:00 GMT</pubDate><guid>http://www.cppblog.com/Ylemzy/articles/116237.html</guid><wfw:comment>http://www.cppblog.com/Ylemzy/comments/116237.html</wfw:comment><comments>http://www.cppblog.com/Ylemzy/articles/116237.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Ylemzy/comments/commentRss/116237.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Ylemzy/services/trackbacks/116237.html</trackback:ping><description><![CDATA[<div style="text-align: center; color: #0040ff;" class="ptt" lang="en-US">K-th Number</div>
<p style="color: #0040ff;">Description</p>
<div style="color: #0040ff;" class="ptx" lang="en-US">You are
working for Macrohard company in data structures department. After
failing your previous task about key insertion you were asked to write a
new data structure that would be able to return quickly k-th order
statistics in the array segment.
<br>That is, given an array a[1...n] of different integer numbers, your
program must answer a series of questions Q(i, j, k) in the form: "What
would be the k-th number in a[i...j] segment, if this segment was
sorted?"
<br>For example, consider the array a = (1, 5, 2, 6, 3, 7, 4). Let the
question be Q(2, 5, 3). The segment a[2...5] is (5, 2, 6, 3). If we sort
this segment, we get (2, 3, 5, 6), the third number is 5, and therefore
the answer to the question is 5. </div>
<p style="color: #0040ff;">Input</p>
<div style="color: #0040ff;" class="ptx" lang="en-US">The first line of the input file contains n ---
the size of the array, and m --- the number of questions to answer (1
&lt;= n &lt;= 100 000, 1 &lt;= m &lt;= 5 000).
<br>The second line contains n different integer numbers not exceeding
10<sup>9</sup> by their absolute values --- the array for which the
answers should be given.
<br>The following m lines contain question descriptions, each
description consists of three numbers: i, j, and k (1 &lt;= i &lt;= j
&lt;= n, 1 &lt;= k &lt;= j - i + 1) and represents the question Q(i, j,
k). </div>
<p style="color: #0040ff;">Output</p>
<div style="color: #0040ff;" class="ptx" lang="en-US">For
each question output the answer to it --- the k-th number in sorted
a[i...j] segment. </div>
<p style="color: #0040ff;">Sample Input</p>
<pre style="color: #0040ff;" class="sio">7 3<br>1 5 2 6 3 7 4<br>2 5 3<br>4 4 1<br>1 7 3</pre>
<p style="color: #0040ff;">Sample Output</p>
<pre style="color: #0040ff;" class="sio">5<br>6<br>3</pre>
代码：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#include</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdio.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdlib.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;maxn&nbsp;100010</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;T<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;l,&nbsp;r,&nbsp;dep;<br>&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pl,&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pr;<br>}fn[maxn&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">3</span><span style="color: #000000;">];<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;th&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;a,&nbsp;b,&nbsp;sort[</span><span style="color: #000000;">30</span><span style="color: #000000;">][maxn],&nbsp;s[maxn],&nbsp;s1,&nbsp;s2;<br>T&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;build(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;l,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;r,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;dep)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;p&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">fn[th</span><span style="color: #000000;">++</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">l&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;l,&nbsp;p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">r&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;r,&nbsp;p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">dep&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;dep;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(l&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;r)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort[dep][l]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;s[l];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;m&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(l&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;r)&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">,&nbsp;i,&nbsp;j,&nbsp;k;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">pl&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;build(l,&nbsp;m,&nbsp;dep&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">),&nbsp;p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">pr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;build(m&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;r,&nbsp;dep&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(k&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;l,&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;m&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;i&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;m&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;r;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(sort[dep&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">][i]&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;sort[dep&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">][j])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort[dep][k</span><span style="color: #000000;">++</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sort[dep&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">][i</span><span style="color: #000000;">++</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort[dep][k</span><span style="color: #000000;">++</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sort[dep&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">][j</span><span style="color: #000000;">++</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;m;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort[dep][k</span><span style="color: #000000;">++</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sort[dep&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">][i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(;&nbsp;j&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;r;&nbsp;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort[dep][k</span><span style="color: #000000;">++</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sort[dep&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">][j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;p;<br>}<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;query(T&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;p,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;num)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;m,&nbsp;l,&nbsp;r,&nbsp;t;<br></span><span style="color: #008000;">//</span><span style="color: #008000;">确定所询问区间里排在num前的数的个数</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(a&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">l&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">r&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;b)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">l,&nbsp;r&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">r;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(sort[p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">dep][p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">r]&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;num)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;r&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;l&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(l&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;r)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(l&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;r)&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(sort[p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">dep][m]&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;num)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;m;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;m&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;r&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">l;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">l&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">r)&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(a&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;m)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;query(p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">pl,&nbsp;num);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(b&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;m)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;query(p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">pr,&nbsp;num);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;t;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n,&nbsp;m,&nbsp;i,&nbsp;l,&nbsp;r,&nbsp;mid,&nbsp;pre,&nbsp;c;<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">n,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">m);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;n;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">s[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;tree&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;build(</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;n,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(m</span><span style="color: #000000;">--</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d%d%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">a,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">b,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">c);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;r&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;n;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(l&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;r)</span><span style="color: #008000;">//</span><span style="color: #008000;">二分枚举数来确定其名次</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mid&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(l&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;r)&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pre&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;query(tree,&nbsp;sort[</span><span style="color: #000000;">0</span><span style="color: #000000;">][mid]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pre&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;c)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;mid;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;mid&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;sort[</span><span style="color: #000000;">0</span><span style="color: #000000;">][l]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="color: #000000;">"</span><span style="color: #000000;">pause</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}<br></span><span style="color: #008000;">/*</span><span style="color: #008000;"><br>7&nbsp;100<br>5&nbsp;3&nbsp;2&nbsp;9&nbsp;8&nbsp;1&nbsp;6<br><br></span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span></div>
<br><br> <img src ="http://www.cppblog.com/Ylemzy/aggbug/116237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Ylemzy/" target="_blank">火碳黑</a> 2010-05-24 17:50 <a href="http://www.cppblog.com/Ylemzy/articles/116237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 1151 Atlantis——线段树</title><link>http://www.cppblog.com/Ylemzy/articles/116229.html</link><dc:creator>火碳黑</dc:creator><author>火碳黑</author><pubDate>Mon, 24 May 2010 07:52:00 GMT</pubDate><guid>http://www.cppblog.com/Ylemzy/articles/116229.html</guid><wfw:comment>http://www.cppblog.com/Ylemzy/comments/116229.html</wfw:comment><comments>http://www.cppblog.com/Ylemzy/articles/116229.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Ylemzy/comments/commentRss/116229.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Ylemzy/services/trackbacks/116229.html</trackback:ping><description><![CDATA[<div style="text-align: center; color: #0040ff;" class="ptt" lang="en-US">Atlantis</div>
<p style="color: #0040ff;">Description</p>
<div style="color: #0040ff;" class="ptx" lang="en-US">There are several ancient Greek texts that
contain descriptions of the fabled island Atlantis. Some of these texts
even include maps of parts of the island. But unfortunately, these maps
describe different regions of Atlantis. Your friend Bill has to know the
total area for which maps exist. You (unwisely) volunteered to write a
program that calculates this quantity.</div>
<p style="color: #0040ff;">Input</p>
<div style="color: #0040ff;" class="ptx" lang="en-US">The input consists of several test cases. Each
test case starts with a line containing a single integer n (1 &lt;= n
&lt;= 100) of available maps. The n following lines describe one map
each. Each of these lines contains four numbers x1;y1;x2;y2 (0 &lt;= x1
&lt; x2 &lt;= 100000;0 &lt;= y1 &lt; y2 &lt;= 100000), not necessarily
integers. The values (x1; y1) and (x2;y2) are the coordinates of the
top-left resp. bottom-right corner of the mapped area.
<br>The input file is terminated by a line containing a single 0. Don't
process it.</div>
<p style="color: #0040ff;">Output</p>
<div style="color: #0040ff;" class="ptx" lang="en-US">For
each test case, your program should output one section. The first line
of each section must be "Test case #k", where k is the number of the
test case (starting with 1). The second one must be "Total explored
area: a", where a is the total explored area (i.e. the area of the union
of all rectangles in this test case), printed exact to two digits to
the right of the decimal point.
<br>Output a blank line after each test case.</div>
<p style="color: #0040ff;">Sample
Input</p>
<pre style="color: #0040ff;" class="sio">2<br>10 10 20 20<br>15 15 25 25.5<br>0</pre>
<p style="color: #0040ff;">Sample Output</p>
<pre style="color: #0040ff;" class="sio">Test case #1<br>Total explored area: 180.00 </pre>
<span style="color: #0040ff;">题意：切割矩形。</span>
<img style="color: #0040ff;" alt="" src="http://www.cppblog.com/images/cppblog_com/ylemzy/160KU.jpg">
<br style="color: #0040ff;">
<span style="color: #0040ff;">先计算绿色部分，在计算橙色部分，再计算蓝色部分。</span>
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;">
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
<span style="color: #000000;">#include</span>
<span style="color: #000000;">&lt;</span>
<span style="color: #000000;">stdio.h</span>
<span style="color: #000000;">&gt;</span>
<span style="color: #000000;">
<br>#include</span>
<span style="color: #000000;">&lt;</span>
<span style="color: #000000;">stdlib.h</span>
<span style="color: #000000;">&gt;</span>
<span style="color: #000000;">
<br>
</span>
<span style="color: #0000ff;">#define</span>
<span style="color: #000000;">&nbsp;maxn&nbsp;500</span>
<span style="color: #000000;">
<br>
</span>
<span style="color: #0000ff;">struct</span>
<span style="color: #000000;">&nbsp;T<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;l,&nbsp;r,&nbsp;cov;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">double</span>
<span style="color: #000000;">&nbsp;len;<br>}tree[maxn&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">5</span>
<span style="color: #000000;">];<br></span>
<span style="color: #0000ff;">struct</span>
<span style="color: #000000;">&nbsp;R<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">double</span>
<span style="color: #000000;">&nbsp;x,&nbsp;y1,&nbsp;y2;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;lr;<br>}rec[maxn&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">];<br></span>
<span style="color: #0000ff;">double</span>
<span style="color: #000000;">&nbsp;y[maxn&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">];<br></span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;cmp1(</span>
<span style="color: #0000ff;">const</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #0000ff;">void</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;a,&nbsp;</span>
<span style="color: #0000ff;">const</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #0000ff;">void</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">double</span>
<span style="color: #000000;">&nbsp;aa&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">((</span>
<span style="color: #0000ff;">double</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">)a),&nbsp;bb&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">((</span>
<span style="color: #0000ff;">double</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">)b);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(aa&nbsp;</span>
<span style="color: #000000;">&gt;</span>
<span style="color: #000000;">&nbsp;bb)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(aa&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;bb)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>}<br></span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;cmp2(</span>
<span style="color: #0000ff;">const</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #0000ff;">void</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;a,&nbsp;</span>
<span style="color: #0000ff;">const</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #0000ff;">void</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;R&nbsp;aa&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">((R</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">)a),&nbsp;bb&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">((R</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">)b);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(aa.x&nbsp;</span>
<span style="color: #000000;">&gt;</span>
<span style="color: #000000;">&nbsp;bb.x)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(aa.x&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;bb.x)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>}<br></span>
<span style="color: #0000ff;">void</span>
<span style="color: #000000;">&nbsp;build(</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;l,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;r,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;th)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;tree[th].l&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;l,&nbsp;tree[th].r&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;r,&nbsp;tree[th].cov&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">,&nbsp;tree[th].len&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(l&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;r)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;m&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;(l&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;r)&nbsp;</span>
<span style="color: #000000;">&gt;&gt;</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;build(l,&nbsp;m,&nbsp;th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">),&nbsp;build(m,&nbsp;r,&nbsp;th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">);<br>}<br></span>
<span style="color: #0000ff;">void</span>
<span style="color: #000000;">&nbsp;op(</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;l,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;r,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;th,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;del)</span>
<span style="color: #008000;">//</span>
<span style="color: #008000;">&nbsp;由于对于竖直边，肯定先插入在删除，所以这里写的不是很符合所有的插入删除统计。&nbsp;</span>
<span style="color: #008000;">
<br>
</span>
<span style="color: #000000;">{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[th].l&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;l&nbsp;</span>
<span style="color: #000000;">&amp;&amp;</span>
<span style="color: #000000;">&nbsp;tree[th].r&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;r)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[th].cov&nbsp;</span>
<span style="color: #000000;">+=</span>
<span style="color: #000000;">&nbsp;del;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[th].cov&nbsp;</span>
<span style="color: #000000;">&gt;</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[th].len&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;y[r]&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">&nbsp;y[l];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[th].len&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].len&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;tree[th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].len;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;m&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;(tree[th].l&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;tree[th].r)&nbsp;</span>
<span style="color: #000000;">&gt;&gt;</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(r&nbsp;</span>
<span style="color: #000000;">&lt;=</span>
<span style="color: #000000;">&nbsp;m)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;op(l,&nbsp;r,&nbsp;th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">,&nbsp;del);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(l&nbsp;</span>
<span style="color: #000000;">&gt;=</span>
<span style="color: #000000;">&nbsp;m)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;op(l,&nbsp;r,&nbsp;th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;del);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;op(l,&nbsp;m,&nbsp;th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">,&nbsp;del),&nbsp;op(m,&nbsp;r,&nbsp;th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;del);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[th].cov&nbsp;</span>
<span style="color: #000000;">&gt;</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[th].len&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;y[tree[th].r]&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">&nbsp;y[tree[th].l];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[th].len&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].len&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;tree[th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].len;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;bs(</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;l,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;r,&nbsp;</span>
<span style="color: #0000ff;">double</span>
<span style="color: #000000;">&nbsp;key)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;m;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">while</span>
<span style="color: #000000;">&nbsp;(l&nbsp;</span>
<span style="color: #000000;">&lt;=</span>
<span style="color: #000000;">&nbsp;r)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;(l&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;r)&nbsp;</span>
<span style="color: #000000;">&gt;&gt;</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(y[m]&nbsp;</span>
<span style="color: #000000;">&gt;</span>
<span style="color: #000000;">&nbsp;key)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;m&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(y[m]&nbsp;</span>
<span style="color: #000000;">&lt;</span>
<span style="color: #000000;">&nbsp;key)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;m&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;m;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;n,&nbsp;i,&nbsp;j,&nbsp;k,&nbsp;l,&nbsp;r,&nbsp;ca&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">double</span>
<span style="color: #000000;">&nbsp;ans,&nbsp;x1,&nbsp;y1,&nbsp;x2,&nbsp;y2;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">while</span>
<span style="color: #000000;">&nbsp;(scanf(</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">%d</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">n),&nbsp;n)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ca</span>
<span style="color: #000000;">++</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">for</span>
<span style="color: #000000;">&nbsp;(i&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">,&nbsp;j&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;&nbsp;i&nbsp;</span>
<span style="color: #000000;">&lt;</span>
<span style="color: #000000;">&nbsp;n;&nbsp;i</span>
<span style="color: #000000;">++</span>
<span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">%lf%lf%lf%lf</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">x1,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">y1,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">x2,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">y2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y[j]&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;y1,&nbsp;rec[j].x&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;x1,&nbsp;rec[j].y1&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;y1,&nbsp;rec[j].y2&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;y2,&nbsp;rec[j</span>
<span style="color: #000000;">++</span>
<span style="color: #000000;">].lr&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y[j]&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;y2,&nbsp;rec[j].x&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;x2,&nbsp;rec[j].y1&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;y1,&nbsp;rec[j].y2&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;y2,&nbsp;rec[j</span>
<span style="color: #000000;">++</span>
<span style="color: #000000;">].lr&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qsort(y,&nbsp;j,&nbsp;</span>
<span style="color: #0000ff;">sizeof</span>
<span style="color: #000000;">(</span>
<span style="color: #0000ff;">double</span>
<span style="color: #000000;">),&nbsp;cmp1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qsort(rec,&nbsp;j,&nbsp;</span>
<span style="color: #0000ff;">sizeof</span>
<span style="color: #000000;">(R),&nbsp;cmp2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">for</span>
<span style="color: #000000;">&nbsp;(k&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;i&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;&nbsp;i&nbsp;</span>
<span style="color: #000000;">&lt;</span>
<span style="color: #000000;">&nbsp;j;&nbsp;i</span>
<span style="color: #000000;">++</span>
<span style="color: #000000;">)</span>
<span style="color: #008000;">//</span>
<span style="color: #008000;">坐标离散化&nbsp;</span>
<span style="color: #008000;">
<br>
</span>
<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(y[i]&nbsp;</span>
<span style="color: #000000;">!=</span>
<span style="color: #000000;">&nbsp;y[i</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y[k</span>
<span style="color: #000000;">++</span>
<span style="color: #000000;">]&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;y[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;build(</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">,&nbsp;k,&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k</span>
<span style="color: #000000;">--</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">for</span>
<span style="color: #000000;">&nbsp;(i&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">,&nbsp;ans&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;&nbsp;i&nbsp;</span>
<span style="color: #000000;">&lt;</span>
<span style="color: #000000;">&nbsp;j&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;&nbsp;i</span>
<span style="color: #000000;">++</span>
<span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;bs(</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">,&nbsp;k,&nbsp;rec[i].y1),&nbsp;r&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;bs(</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">,&nbsp;k,&nbsp;rec[i].y2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;op(l,&nbsp;r,&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;rec[i].lr);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span>
<span style="color: #000000;">+=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1.0</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;tree[</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].len&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;(rec[i</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].x&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">&nbsp;rec[i].x);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">Test&nbsp;case&nbsp;#%d\nTotal&nbsp;explored&nbsp;area:&nbsp;%.2lf\n\n</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">,&nbsp;ca,&nbsp;ans);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;system(</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">pause</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;<br>}<br></span>
</div>
<br>
<br><img src ="http://www.cppblog.com/Ylemzy/aggbug/116229.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Ylemzy/" target="_blank">火碳黑</a> 2010-05-24 15:52 <a href="http://www.cppblog.com/Ylemzy/articles/116229.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 3468 A Simple Problem with Integers——线段树</title><link>http://www.cppblog.com/Ylemzy/articles/115787.html</link><dc:creator>火碳黑</dc:creator><author>火碳黑</author><pubDate>Wed, 19 May 2010 02:37:00 GMT</pubDate><guid>http://www.cppblog.com/Ylemzy/articles/115787.html</guid><wfw:comment>http://www.cppblog.com/Ylemzy/comments/115787.html</wfw:comment><comments>http://www.cppblog.com/Ylemzy/articles/115787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Ylemzy/comments/commentRss/115787.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Ylemzy/services/trackbacks/115787.html</trackback:ping><description><![CDATA[<div style="text-align: center; color: #0874ff;" class="ptt" lang="en-US">A Simple Problem with Integers</div>
<p style="color: #0874ff;">Description</p>
<div style="color: #0874ff;" class="ptx" lang="en-US">
<p>You have <em>N</em>
integers, <em>A</em><sub>1</sub>, <em>A</em><sub>2</sub>, ... , <em>A<sub>N</sub></em>.
You need to deal with two kinds of operations. One type of operation is
to add some given number to each number in a given interval. The other
is to ask for the sum of numbers in a given interval.</p>
</div>
<p style="color: #0874ff;">Input</p>
<div style="color: #0874ff;" class="ptx" lang="en-US">
<p>The first line
contains two numbers <em>N</em> and <em>Q</em>. 1 &#8804; <em>N</em>,<em>Q</em> &#8804;
100000.<br>The second line contains <em>N</em> numbers, the initial values
of <em>A</em><sub>1</sub>, <em>A</em><sub>2</sub>, ... , <em>A<sub>N</sub></em>.
-1000000000 &#8804; <em>A<sub>i</sub></em> &#8804; 1000000000.<br>Each of the next <em>Q</em>
lines represents an operation.<br>"C <em>a</em><em>b</em><em>c</em>" means
adding <em>c</em> to each of <em>A<sub>a</sub></em>, <em>A<sub>a</sub></em><sub>+1</sub>,
... , <em>A<sub>b</sub></em>. -10000 &#8804; <em>c</em> &#8804; 10000.<br>"Q <em>a</em><em>b</em>"
means querying the sum of <em>A<sub>a</sub></em>, <em>A<sub>a</sub></em><sub>+1</sub>,
... , <em>A<sub>b</sub></em>.</p>
</div>
<p style="color: #0874ff;">Output</p>
<div style="color: #0874ff;" class="ptx" lang="en-US">
<p>You need to answer all <em>Q</em> commands in
order. One answer in a line.</p>
</div>
<p style="color: #0874ff;">Sample Input</p>
<pre style="color: #0874ff;" class="sio">10 5<br>1 2 3 4 5 6 7 8 9 10<br>Q 4 4<br>Q 1 10<br>Q 2 4<br>C 3 6 3<br>Q 2 4<br></pre>
<p style="color: #0874ff;">Sample Output</p>
<pre style="color: #0874ff;" class="sio">4<br>55<br>9<br>15<br>代码：<br></pre>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;">
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
<span style="color: #000000;">#include</span>
<span style="color: #000000;">&lt;</span>
<span style="color: #000000;">stdio.h</span>
<span style="color: #000000;">&gt;</span>
<span style="color: #000000;">
<br>#include</span>
<span style="color: #000000;">&lt;</span>
<span style="color: #000000;">stdlib.h</span>
<span style="color: #000000;">&gt;</span>
<span style="color: #000000;">
<br>
</span>
<span style="color: #0000ff;">#define</span>
<span style="color: #000000;">&nbsp;maxn&nbsp;100010</span>
<span style="color: #000000;">
<br>
</span>
<span style="color: #0000ff;">struct</span>
<span style="color: #000000;">&nbsp;T<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;l,&nbsp;r;<br>&nbsp;&nbsp;&nbsp;&nbsp;__int64&nbsp;value,&nbsp;delta;<br>}tree[</span>
<span style="color: #000000;">5</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;maxn];<br>__int64&nbsp;v[maxn];<br></span>
<span style="color: #0000ff;">void</span>
<span style="color: #000000;">&nbsp;build(</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;l,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;r,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;th)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;tree[th].l&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;l,&nbsp;tree[th].r&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;r,&nbsp;tree[th].delta&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(l&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;r)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[th].value&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;v[l];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;k&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;(l&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;r)&nbsp;</span>
<span style="color: #000000;">/</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;build(l,&nbsp;k,&nbsp;th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;build(k&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;r,&nbsp;th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;tree[th].value&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;tree[th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].value&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;tree[th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].value;<br>}<br></span>
<span style="color: #0000ff;">void</span>
<span style="color: #000000;">&nbsp;update(</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;l,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;r,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;th,&nbsp;__int64&nbsp;d)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;tree[th].value&nbsp;</span>
<span style="color: #000000;">+=</span>
<span style="color: #000000;">&nbsp;(r&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">&nbsp;l&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">)&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;d;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[th].delta)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[th].value&nbsp;</span>
<span style="color: #000000;">+=</span>
<span style="color: #000000;">&nbsp;(tree[th].r&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">&nbsp;tree[th].l&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">)&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;tree[th].delta;</span>
<span style="color: #008000;">//</span>
<span style="color: #008000;">检查更新&nbsp;</span>
<span style="color: #008000;">
<br>
</span>
<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].delta&nbsp;</span>
<span style="color: #000000;">+=</span>
<span style="color: #000000;">&nbsp;tree[th].delta,&nbsp;tree[th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].delta&nbsp;</span>
<span style="color: #000000;">+=</span>
<span style="color: #000000;">&nbsp;tree[th].delta;</span>
<span style="color: #008000;">//</span>
<span style="color: #008000;">把孩子的delta更新，即赖操作&nbsp;</span>
<span style="color: #008000;">
<br>
</span>
<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[th].delta&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[th].l&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;l&nbsp;</span>
<span style="color: #000000;">&amp;&amp;</span>
<span style="color: #000000;">&nbsp;tree[th].r&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;r)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].delta&nbsp;</span>
<span style="color: #000000;">+=</span>
<span style="color: #000000;">&nbsp;d,&nbsp;tree[th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].delta&nbsp;</span>
<span style="color: #000000;">+=</span>
<span style="color: #000000;">&nbsp;d;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;k&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;(tree[th].l&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;tree[th].r)&nbsp;</span>
<span style="color: #000000;">/</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(r&nbsp;</span>
<span style="color: #000000;">&lt;=</span>
<span style="color: #000000;">&nbsp;k)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update(l,&nbsp;r,&nbsp;th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">,&nbsp;d);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(l&nbsp;</span>
<span style="color: #000000;">&gt;=</span>
<span style="color: #000000;">&nbsp;k&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update(l,&nbsp;r,&nbsp;th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;d);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update(l,&nbsp;k,&nbsp;th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">,&nbsp;d),&nbsp;update(k&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;r,&nbsp;th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;d);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br>__int64&nbsp;sum(</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;l,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;r,&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;th)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[th].delta)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[th].value&nbsp;</span>
<span style="color: #000000;">+=</span>
<span style="color: #000000;">&nbsp;(tree[th].r&nbsp;</span>
<span style="color: #000000;">-</span>
<span style="color: #000000;">&nbsp;tree[th].l&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">)&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;tree[th].delta;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">].delta&nbsp;</span>
<span style="color: #000000;">+=</span>
<span style="color: #000000;">&nbsp;tree[th].delta,&nbsp;tree[th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">].delta&nbsp;</span>
<span style="color: #000000;">+=</span>
<span style="color: #000000;">&nbsp;tree[th].delta;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[th].delta&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(tree[th].l&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;l&nbsp;</span>
<span style="color: #000000;">&amp;&amp;</span>
<span style="color: #000000;">&nbsp;tree[th].r&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;r)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;tree[th].value;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;k&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;(tree[th].l&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;tree[th].r)&nbsp;</span>
<span style="color: #000000;">/</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(r&nbsp;</span>
<span style="color: #000000;">&lt;=</span>
<span style="color: #000000;">&nbsp;k)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;sum(l,&nbsp;r,&nbsp;th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(l&nbsp;</span>
<span style="color: #000000;">&gt;=</span>
<span style="color: #000000;">&nbsp;k&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;sum(l,&nbsp;r,&nbsp;th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;sum(l,&nbsp;k,&nbsp;th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">)&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;sum(k&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;r,&nbsp;th&nbsp;</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">int</span>
<span style="color: #000000;">&nbsp;n,&nbsp;m,&nbsp;i,&nbsp;x,&nbsp;y;<br>&nbsp;&nbsp;&nbsp;&nbsp;__int64&nbsp;delta;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">char</span>
<span style="color: #000000;">&nbsp;op[</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">%d%d</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">n,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">m);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">for</span>
<span style="color: #000000;">&nbsp;(i&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">;&nbsp;i&nbsp;</span>
<span style="color: #000000;">&lt;=</span>
<span style="color: #000000;">&nbsp;n;&nbsp;i</span>
<span style="color: #000000;">++</span>
<span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">%I64d</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">v[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;build(</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;n,&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">while</span>
<span style="color: #000000;">&nbsp;(m</span>
<span style="color: #000000;">--</span>
<span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">%s</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">,&nbsp;op);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;(</span>
<span style="color: #000000;">*</span>
<span style="color: #000000;">op&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">'</span>
<span style="color: #000000;">Q</span>
<span style="color: #000000;">'</span>
<span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">%d%d</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">x,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">y);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">%I64d\n</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">,&nbsp;sum(x,&nbsp;y,&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #000000;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">%d%d%I64d</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">x,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">y,&nbsp;</span>
<span style="color: #000000;">&amp;</span>
<span style="color: #000000;">delta);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update(x,&nbsp;y,&nbsp;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">,&nbsp;delta);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;system(</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">pause</span>
<span style="color: #000000;">"</span>
<span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #000000;">0</span>
<span style="color: #000000;">;<br>}<br><br></span>
</div>
<br><img src ="http://www.cppblog.com/Ylemzy/aggbug/115787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Ylemzy/" target="_blank">火碳黑</a> 2010-05-19 10:37 <a href="http://www.cppblog.com/Ylemzy/articles/115787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 3321 Apple Tree——树状数组 </title><link>http://www.cppblog.com/Ylemzy/articles/115313.html</link><dc:creator>火碳黑</dc:creator><author>火碳黑</author><pubDate>Thu, 13 May 2010 14:37:00 GMT</pubDate><guid>http://www.cppblog.com/Ylemzy/articles/115313.html</guid><wfw:comment>http://www.cppblog.com/Ylemzy/comments/115313.html</wfw:comment><comments>http://www.cppblog.com/Ylemzy/articles/115313.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Ylemzy/comments/commentRss/115313.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Ylemzy/services/trackbacks/115313.html</trackback:ping><description><![CDATA[
		<div style="text-align: center; color: rgb(0, 64, 255);" class="ptt" lang="en-US">Apple Tree</div>
		<p style="color: rgb(0, 64, 255);">Description</p>
		<div style="color: rgb(0, 64, 255);" class="ptx" lang="en-US">
				<p>There is an apple tree outside of kaka's
house. Every autumn, a lot of apples will grow in the tree. Kaka likes
apple very much, so he has been carefully nurturing the big apple tree. </p>
				<p>The
tree has <em>N</em> forks which are connected by branches. Kaka numbers
the forks by 1 to <em>N</em> and the root is always numbered by 1. Apples
will grow on the forks and two apple won't grow on the same fork. kaka
wants to know how many apples are there in a sub-tree, for his study of
the produce ability of the apple tree. </p>
				<p>The trouble is that a new
apple may grow on an empty fork some time and kaka may pick an apple
from the tree for his dessert. Can you help kaka?</p>
				<center>
						<img src="http://162.105.81.212/JudgeOnline/images/3321_1.gif" />
				</center>
		</div>
		<p style="color: rgb(0, 64, 255);">Input</p>
		<div style="color: rgb(0, 64, 255);" class="ptx" lang="en-US">
				<p>The first line
contains an integer <em>N</em> (<em>N</em> ≤ 100,000) , which is the number
of the forks in the tree.<br />The following <em>N</em> - 1 lines each
contain two integers <em>u</em> and <em>v</em>, which means fork <em>u</em>
and fork <em>v</em> are connected by a branch.<br />The next line contains
an integer <em>M</em> (<em>M</em> ≤ 100,000).<br />The following <em>M</em>
lines each contain a message which is either<br />"<strong>C <em>x</em></strong>"
which means the existence of the apple on fork <em>x</em> has been
changed. i.e. if there is an apple on the fork, then Kaka pick it;
otherwise a new apple has grown on the empty fork.<br />or<br />"<strong>Q <em>x</em></strong>"
which means an inquiry for the number of apples in the sub-tree above
the fork <em>x</em>, including the apple (if exists) on the fork x<br />Note
the tree is full of apples at the beginning</p>
		</div>
		<p style="color: rgb(0, 64, 255);">Output</p>
		<div style="color: rgb(0, 64, 255);" class="ptx" lang="en-US">For every inquiry, output the correspond
answer per line.</div>
		<p style="color: rgb(0, 64, 255);">Sample Input</p>
		<pre style="color: rgb(0, 64, 255);" class="sio">3<br />1 2<br />1 3<br />3<br />Q 1<br />C 2<br />Q 1<br /></pre>
		<p style="color: rgb(0, 64, 255);">Sample Output</p>
		<pre style="color: rgb(0, 64, 255);" class="sio">3<br />2<br />题意：给出一颗树，对某个节点进行操作，如果有苹果，则摘；没有，则长个苹果。求某个节点拥有的苹果数量，每个节点最多只有一个苹果。<span style="font-family: sans-serif;"><br />代码：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">#include</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">stdio.h</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />#include</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">stdlib.h</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">#define</span><span style="color: rgb(0, 0, 0);"> maxn 100020</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> low[maxn], high[maxn], n, c[maxn], t[maxn];<br /></span><span style="color: rgb(0, 0, 255);">struct</span><span style="color: rgb(0, 0, 0);"> P<br />{<br />    </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> pt, head;<br />}p[maxn];<br /></span><span style="color: rgb(0, 0, 255);">struct</span><span style="color: rgb(0, 0, 0);"> N<br />{<br />    </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> pt, id;<br />}node[maxn];<br /></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> th </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">, time </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> create(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> id)<br />{<br />    th</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">;<br />    node[th].pt </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">, node[th].id </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> id;<br />    </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> th;<br />}<br /></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> lowbit(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> x)<br />{<br />    </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> x </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">x);<br />}<br /></span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> update(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> x, </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> y)<br />{<br />    </span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);"> (x </span><span style="color: rgb(0, 0, 0);">&lt;=</span><span style="color: rgb(0, 0, 0);"> n)<br />    {<br />        c[x] </span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);"> y;<br />        x </span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);"> lowbit(x);<br />    }<br />}<br /></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> sum(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> x)<br />{<br />    </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> s </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br />    </span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);"> (x </span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">)<br />    {<br />        s </span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);"> c[x];<br />        x </span><span style="color: rgb(0, 0, 0);">-=</span><span style="color: rgb(0, 0, 0);"> lowbit(x);<br />    }<br />    </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> s;<br />}<br /></span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> dfs(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> root)<br />{<br />    </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> v </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> p[root].head;<br />    time</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">添加时间戳 ，就可以是问题转化为求区间和 </span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">    low[root] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> time;<br />    </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (v </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> p[root].head; v </span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">; v </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> node[v].pt)<br />    {<br />        dfs(node[v].id);<br />    }<br />    high[root] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> time;<br />}<br /></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> main()<br />{<br />    </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> i, u, v, no, m, x, num;<br />    scanf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">%d</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">n);<br />    </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (i </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">; i </span><span style="color: rgb(0, 0, 0);">&lt;=</span><span style="color: rgb(0, 0, 0);"> n; i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)<br />    {<br />        p[i].pt </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">, p[i].head </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">;<br />        update(i, </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">);<br />        t[i] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">;<br />    }<br />    num </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> n;<br />    </span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">num)<br />    {<br />        scanf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">%d%d</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">u, </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">v);<br />        no </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> create(v);<br />        node[p[u].pt].pt </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> no;<br />        p[u].pt </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> no;<br />        </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (p[u].head </span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)<br />        {<br />            p[u].head </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> no;<br />        }<br />    }<br />    dfs(</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">);<br />    </span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);"> a[</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">];<br />    scanf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">%d</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">m);<br />    </span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);"> (m</span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">)<br />    {<br />        scanf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">%s%d</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, a, </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">x);<br />        </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (a[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">] </span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">Q</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">)<br />        {<br />            printf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">%d\n</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, sum(high[x]) </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> sum(low[x] </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">));<br />        }<br />        </span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br />        {<br />            </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (t[x])<br />            {<br />                update(low[x], </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">);<br />                t[x] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br />            }<br />            </span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br />            {<br />                update(low[x], </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">);<br />                t[x] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">;<br />            }<br />        }<br />    }<br />    system(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">pause</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />    </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br />}<br /></span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);"><br />5<br />1 2<br />1 3<br />3 4<br />3 5<br /></span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br /><br /></span></div></span></pre>
<img src ="http://www.cppblog.com/Ylemzy/aggbug/115313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Ylemzy/" target="_blank">火碳黑</a> 2010-05-13 22:37 <a href="http://www.cppblog.com/Ylemzy/articles/115313.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 2352 Stars__树状数组</title><link>http://www.cppblog.com/Ylemzy/articles/115305.html</link><dc:creator>火碳黑</dc:creator><author>火碳黑</author><pubDate>Thu, 13 May 2010 12:32:00 GMT</pubDate><guid>http://www.cppblog.com/Ylemzy/articles/115305.html</guid><wfw:comment>http://www.cppblog.com/Ylemzy/comments/115305.html</wfw:comment><comments>http://www.cppblog.com/Ylemzy/articles/115305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Ylemzy/comments/commentRss/115305.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Ylemzy/services/trackbacks/115305.html</trackback:ping><description><![CDATA[
		<div style="text-align: center; color: rgb(0, 112, 255);" class="ptt" lang="en-US">Stars</div>
		<p style="color: rgb(0, 112, 255);">Description</p>
		<div style="color: rgb(0, 112, 255);" class="ptx" lang="en-US">Astronomers often examine star maps where stars
are represented by points on a plane and each star has Cartesian
coordinates. Let the level of a star be an amount of the stars that are
not higher and not to the right of the given star. Astronomers want to
know the distribution of the levels of the stars.
<br /><center><img src="http://162.105.81.212/JudgeOnline/images/2352_1.jpg" /></center><br />For example, look at the map shown on the figure above. Level of the
star number 5 is equal to 3 (it's formed by three stars with a numbers
1, 2 and 4). And the levels of the stars numbered by 2 and 4 are 1. At
this map there are only one star of the level 0, two stars of the level
1, one star of the level 2, and one star of the level 3.
<br /><br />You are to write a program that will count the amounts of the stars
of each level on a given map.</div>
		<p style="color: rgb(0, 112, 255);">Input</p>
		<div style="color: rgb(0, 112, 255);" class="ptx" lang="en-US">The first line of the input file contains a
number of stars N (1&lt;=N&lt;=15000). The following N lines describe
coordinates of stars (two integers X and Y per line separated by a
space, 0&lt;=X,Y&lt;=32000). There can be only one star at one point of
the plane. Stars are listed in ascending order of Y coordinate. Stars
with equal Y coordinates are listed in ascending order of X coordinate.
<br /></div>
		<p style="color: rgb(0, 112, 255);">Output</p>
		<div style="color: rgb(0, 112, 255);" class="ptx" lang="en-US">The
output should contain N lines, one number per line. The first line
contains amount of stars of the level 0, the second does amount of stars
of the level 1 and so on, the last line contains amount of stars of the
level N-1.</div>
		<p style="color: rgb(0, 112, 255);">Sample Input</p>
		<pre style="color: rgb(0, 112, 255);" class="sio">5<br />1 1<br />5 1<br />7 1<br />3 3<br />5 5</pre>
		<p style="color: rgb(0, 112, 255);">Sample Output</p>
		<pre style="color: rgb(0, 112, 255);" class="sio">1<br />2<br />1<br />1<br />0</pre>
		<span style="color: rgb(255, 0, 0);">题意：某星左下方的星数为它的值。求出值从0到n-1的星数。</span>
		<br style="color: rgb(255, 0, 0);" />
		<span style="color: rgb(255, 0, 0);">代码：</span>
		<br style="color: rgb(255, 0, 0);" />
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
				<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
				<span style="color: rgb(0, 0, 0);">#include</span>
				<span style="color: rgb(0, 0, 0);">&lt;</span>
				<span style="color: rgb(0, 0, 0);">stdio.h</span>
				<span style="color: rgb(0, 0, 0);">&gt;</span>
				<span style="color: rgb(0, 0, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 0, 255);">#define</span>
				<span style="color: rgb(0, 0, 0);"> maxn 32010</span>
				<span style="color: rgb(0, 0, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> c[maxn], sum[maxn];<br /></span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> lowBit(</span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> x)<br />{<br />    </span>
				<span style="color: rgb(0, 0, 255);">return</span>
				<span style="color: rgb(0, 0, 0);"> x </span>
				<span style="color: rgb(0, 0, 0);">&amp;</span>
				<span style="color: rgb(0, 0, 0);"> (x </span>
				<span style="color: rgb(0, 0, 0);">^</span>
				<span style="color: rgb(0, 0, 0);"> (x </span>
				<span style="color: rgb(0, 0, 0);">-</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">1</span>
				<span style="color: rgb(0, 0, 0);">));//return x &amp; (-x);更快<br />}<br /></span>
				<span style="color: rgb(0, 0, 255);">void</span>
				<span style="color: rgb(0, 0, 0);"> update(</span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> x)<br />{<br />    </span>
				<span style="color: rgb(0, 0, 255);">while</span>
				<span style="color: rgb(0, 0, 0);"> (x </span>
				<span style="color: rgb(0, 0, 0);">&lt;</span>
				<span style="color: rgb(0, 0, 0);"> maxn)<br />    {<br />        c[x]</span>
				<span style="color: rgb(0, 0, 0);">++</span>
				<span style="color: rgb(0, 0, 0);">;<br />        x </span>
				<span style="color: rgb(0, 0, 0);">+=</span>
				<span style="color: rgb(0, 0, 0);"> lowBit(x);<br />    }<br />}<br /></span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> s(</span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> x)<br />{<br />    </span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> pre </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">;<br />    </span>
				<span style="color: rgb(0, 0, 255);">while</span>
				<span style="color: rgb(0, 0, 0);"> (x </span>
				<span style="color: rgb(0, 0, 0);">&gt;</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">)<br />    {<br />        pre </span>
				<span style="color: rgb(0, 0, 0);">+=</span>
				<span style="color: rgb(0, 0, 0);"> c[x];<br />        x </span>
				<span style="color: rgb(0, 0, 0);">-=</span>
				<span style="color: rgb(0, 0, 0);"> lowBit(x);<br />    }<br />    </span>
				<span style="color: rgb(0, 0, 255);">return</span>
				<span style="color: rgb(0, 0, 0);"> pre;<br />}<br /></span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> main()<br />{<br />    </span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> i, n, x, y;<br />    scanf(</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">%d</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">, </span>
				<span style="color: rgb(0, 0, 0);">&amp;</span>
				<span style="color: rgb(0, 0, 0);">n);<br />    </span>
				<span style="color: rgb(0, 0, 255);">for</span>
				<span style="color: rgb(0, 0, 0);"> (i </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">; i </span>
				<span style="color: rgb(0, 0, 0);">&lt;</span>
				<span style="color: rgb(0, 0, 0);"> n; i</span>
				<span style="color: rgb(0, 0, 0);">++</span>
				<span style="color: rgb(0, 0, 0);">)<br />    {<br />        scanf(</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">%d%d</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">, </span>
				<span style="color: rgb(0, 0, 0);">&amp;</span>
				<span style="color: rgb(0, 0, 0);">x, </span>
				<span style="color: rgb(0, 0, 0);">&amp;</span>
				<span style="color: rgb(0, 0, 0);">y);</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">树状数组的坐标是从1开始    </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 0, 0);">        sum[s(x</span>
				<span style="color: rgb(0, 0, 0);">+</span>
				<span style="color: rgb(0, 0, 0);">1</span>
				<span style="color: rgb(0, 0, 0);">)]</span>
				<span style="color: rgb(0, 0, 0);">++</span>
				<span style="color: rgb(0, 0, 0);">;<br />        update(x</span>
				<span style="color: rgb(0, 0, 0);">+</span>
				<span style="color: rgb(0, 0, 0);">1</span>
				<span style="color: rgb(0, 0, 0);">);<br />    }<br />    </span>
				<span style="color: rgb(0, 0, 255);">for</span>
				<span style="color: rgb(0, 0, 0);"> (i </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">; i </span>
				<span style="color: rgb(0, 0, 0);">&lt;</span>
				<span style="color: rgb(0, 0, 0);"> n; i</span>
				<span style="color: rgb(0, 0, 0);">++</span>
				<span style="color: rgb(0, 0, 0);">)<br />    {<br />        printf(</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">%d\n</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">, sum[i]);<br />    }<br />    system(</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">pause</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">);<br />    </span>
				<span style="color: rgb(0, 0, 255);">return</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">;<br />}<br /></span>
		</div>
		<br />
		<br />
<img src ="http://www.cppblog.com/Ylemzy/aggbug/115305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Ylemzy/" target="_blank">火碳黑</a> 2010-05-13 20:32 <a href="http://www.cppblog.com/Ylemzy/articles/115305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 2182 Lost Cows——线段树入门题</title><link>http://www.cppblog.com/Ylemzy/articles/113320.html</link><dc:creator>火碳黑</dc:creator><author>火碳黑</author><pubDate>Fri, 23 Apr 2010 04:29:00 GMT</pubDate><guid>http://www.cppblog.com/Ylemzy/articles/113320.html</guid><wfw:comment>http://www.cppblog.com/Ylemzy/comments/113320.html</wfw:comment><comments>http://www.cppblog.com/Ylemzy/articles/113320.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Ylemzy/comments/commentRss/113320.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Ylemzy/services/trackbacks/113320.html</trackback:ping><description><![CDATA[<div style="text-align: center; color: #0040ff;" class="ptt" lang="en-US">Lost Cows</div>
<p style="color: #0040ff;">Description</p>
<div style="color: #0040ff;" class="ptx" lang="en-US">N (2 &lt;= N &lt;= 8,000) cows have unique
brands in the range 1..N. In a spectacular display of poor judgment,
they visited the neighborhood 'watering hole' and drank a few too many
beers before dinner.  When it was time to line up for their evening
meal, they did not line up in the required ascending numerical order of
their brands.
<br><br>Regrettably, FJ does not have a way to sort them.  Furthermore, he's
not very good at observing problems.  Instead of writing down each
cow's brand, he determined a rather silly statistic:  For each cow in
line, he knows the number of cows that precede that cow in line that do,
in fact, have smaller brands than that cow.
<br><br>Given this data, tell FJ the exact ordering of the cows.
<br></div>
<p style="color: #0040ff;">Input</p>
<div style="color: #0040ff;" class="ptx" lang="en-US">* Line
1: A single integer, N
<br><br>* Lines 2..N: These N-1 lines describe the number of cows that
precede a given cow in line and have brands smaller than that cow.  Of
course, no cows precede the first cow in line, so she is not listed.
Line 2 of the input describes the number of preceding cows whose brands
are smaller than the cow in slot #2; line 3 describes the number of
preceding cows whose brands are smaller than the cow in slot #3; and so
on.
<br></div>
<p style="color: #0040ff;">Output</p>
<div style="color: #0040ff;" class="ptx" lang="en-US">* Lines
1..N: Each of the N lines of output tells the brand of a cow in line.
Line #1 of the output tells the brand of the first cow in line; line 2
tells the brand of the second cow; and so on.</div>
<p style="color: #0040ff;">Sample
Input</p>
<pre style="color: #0040ff;" class="sio">5<br>1<br>2<br>1<br>0<br></pre>
<p style="color: #0040ff;">Sample Output</p>
<pre style="color: #0040ff;" class="sio">2<br>4<br>5
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#include</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdio.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;maxn&nbsp;8000</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;tree[maxn</span><span style="color: #000000;">*</span><span style="color: #000000;">3</span><span style="color: #000000;">],&nbsp;s[maxn],&nbsp;ans[maxn];<br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;build(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;l,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;r,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;depth)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;tree[depth]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;r&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;l&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(l&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;r)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;mid&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(l&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;r)&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;build(l,&nbsp;mid,&nbsp;(depth&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;build(mid&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;r,&nbsp;(depth&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;find(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;l,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;r,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;index,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;num,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;depth)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;tree[depth]</span><span style="color: #000000;">--</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(l&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;r)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans[index]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;r;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;mid&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(l&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;r)&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;m&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;depth&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(num&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;tree[m])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;find(l,&nbsp;mid,&nbsp;index,&nbsp;num,&nbsp;m);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num&nbsp;</span><span style="color: #000000;">-=</span><span style="color: #000000;">&nbsp;tree[m];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;find(mid&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;r,&nbsp;index,&nbsp;num,&nbsp;m&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n,&nbsp;i;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">n)&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;EOF)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;build(</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;n,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">,&nbsp;s[</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;n;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">s[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s[i]</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;n;&nbsp;i&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">--</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;find(</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;n,&nbsp;i,&nbsp;s[i],&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;n;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;ans[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div>
<br>3<br>1<br>题意：给出每个数所在位置的逆序列个数，求这些数。<br>用线段树写，一来统计个数，而来可以随时删除已去掉的数，这些操作都是logn。<br><br></pre>
<br><img src ="http://www.cppblog.com/Ylemzy/aggbug/113320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Ylemzy/" target="_blank">火碳黑</a> 2010-04-23 12:29 <a href="http://www.cppblog.com/Ylemzy/articles/113320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>树状数组</title><link>http://www.cppblog.com/Ylemzy/articles/98322.html</link><dc:creator>火碳黑</dc:creator><author>火碳黑</author><pubDate>Sun, 11 Oct 2009 11:48:00 GMT</pubDate><guid>http://www.cppblog.com/Ylemzy/articles/98322.html</guid><wfw:comment>http://www.cppblog.com/Ylemzy/comments/98322.html</wfw:comment><comments>http://www.cppblog.com/Ylemzy/articles/98322.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Ylemzy/comments/commentRss/98322.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Ylemzy/services/trackbacks/98322.html</trackback:ping><description><![CDATA[		<span style="color: #0010ff;">树状数组是对一个数组改变某个元素和求和比较实用的数据结构。两中操作都是O(logn)。</span>
<br style="color: #0010ff;">&nbsp;<span style="color: #8a3300;">在解题过程中，我们有时需要维护一个数组的前缀和S[i]=A[1]+A[2]+...+A[i]。</span>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 但是不难发现，如果我们修改了任意一个A[i],S[i]、S[i+1]...S[n]都会发生变化。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以说，每次修改A[i]后，调整前缀和S[]在最坏情况下会需要O(n)的时间。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 当n非常大时，程序会运行得非常缓慢。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;因此，这里我们引入&#8220;树状数组&#8221;，它的修改与求和都是O(logn)的，效率非常高。</p>
<p style="color: #8a3300;">【理论】</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了对树状数组有个形 象的认识，我们先看下面这张图。</p>
<p style="color: #8a3300;"><img alt="" src="http://www.cppblog.com/images/cppblog_com/ylemzy/b_25F1665EFE7011E2D2EF878AB4C18939.jpg" align="left" height="321" width="500"><br><a href="http://fqq11679.photo.hexun.com/46304845_d.html" target="_blank"></a></p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;如图所示，红色矩形表示的数组C[]就是树状数组。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里，C[i]表示A[i-2^k+1]到A[i]的和，而k则是i在二进制时末尾0的个数，</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 或者说是i用2的幂方和表示时的最小指数。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （ 当然，利用位运算，我们可以直接计算出2^k=i&amp;(i^(i-1)) ）</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同时，我们也不难发现，这个k就是该节点在树中的高度，因而这个树的高度不会超过logn。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以,当我们修改A[i]的值时，可以从C[i]往根节点一路上溯，调整这条路上的所有C[]即可，</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个操作的复杂度在最坏情况下就是树的高度即O(logn)。&nbsp;&nbsp;</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;另外，对于求数列的前n项和，只需找到n以前的所有最大子树，把其根节点的C加起来即可。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不难发现，这些子树的数目是n在二进制时1的个数，或者说是把n展开成2的幂方和时的项数,</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因此，求和操作的复杂度也是O(logn)。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接着，我们考察这两种操作下标变化的规律：</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先看修改操作：</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 已知下标i，求其父节点的下标。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们可以考虑对树从逻辑上转化：</p>
<p style="color: #8a3300;"><img alt="" src="http://www.cppblog.com/images/cppblog_com/ylemzy/b_D394E00A5DDCCB42C41D983528C5FA50.jpg" align="left" height="345" width="500"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如图，我们将子树向右对称翻折，虚拟出一些空白结点（图中白色），将原树转化成完全二叉树。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有图可知，对于节点i，其父节点的下标与翻折出的空白节点下标相同。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因而父节点下标 p=i+2^k&nbsp; (2^k是i用2的幂方和展开式中的最小幂，即i为根节点子树的规模)</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;即&nbsp; p = i + i&amp;(i^(i-1))&nbsp;。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接着对于求和操作：</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因为每棵子树覆盖的范围都是2的幂，所以我们要求子树i的前一棵树，只需让i减去2的最小幂即可。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;即&nbsp; p =&nbsp;i - i&amp;(i^(i-1)) 。</p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 至此，我们已经比较详细的分析了树状数组的复杂度和原理。 </p>
<p style="color: #8a3300;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在最后，我们将给出一些树状数组的实现代码，希望读者能够仔细体会其中的细节。</p>
<p>【代码】</p>
<p>&nbsp; 求最小幂2^k:
</p>
<table class="fck__showtableborders" style="margin: 10px;" cellpadding="10" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td bgcolor="#eeeeee"><font face="Courier New"><br><font color="#993300">int Lowbit(int t) <br>{ <br>&nbsp;&nbsp;&nbsp;&nbsp;return t &amp; ( t ^ ( t - 1 ) ); <br>} </font><br></font></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;求前n项和：<br></p>
<table class="fck__showtableborders" style="margin: 10px;" cellpadding="10" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td bgcolor="#eeeeee"><font face="Courier New"><br><font color="#993300">int Sum(int end) <br>{ <br>&nbsp;&nbsp;&nbsp;&nbsp;int sum = 0; <br>&nbsp;&nbsp;&nbsp;&nbsp;while(end &gt; 0) <br>&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum += in[end]; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end -= Lowbit(end); <br>&nbsp;&nbsp;&nbsp;&nbsp;} <br>&nbsp;&nbsp;&nbsp;&nbsp;return sum; <br>} <br></font></font></td>
        </tr>
    </tbody>
</table>
<br>&nbsp;对某个元素进行加法操作：&nbsp;<br><font face="Courier New"><br><font color="#993300">void plus(int pos , int num) <br>{ <br>&nbsp;&nbsp;&nbsp;&nbsp;while(pos &lt;= n) <br>&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in[pos] += num; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos += Lowbit(pos); <br>&nbsp;&nbsp;&nbsp;&nbsp;} <br>} </font></font><br style="color: #0010ff;"><span style="color: #0010ff;"></span><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"></span><br></div><img src ="http://www.cppblog.com/Ylemzy/aggbug/98322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Ylemzy/" target="_blank">火碳黑</a> 2009-10-11 19:48 <a href="http://www.cppblog.com/Ylemzy/articles/98322.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>