mirror of
https://github.com/xlucn/PAT.git
synced 2026-11-05 06:37:35 +08:00
26 lines
12 KiB
HTML
26 lines
12 KiB
HTML
Larry and Inversions
|
||
<div class="ques-view"><p>Larry just studied the algorithm to count number of inversions. He's very interested in it. He's considering another problem: Given a permutation of integers from 1 to <span class="katex"><span class="katex-mathml"><math><mrow><mi>n</mi></mrow>n</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.43056em;"></span><span class="strut bottom" style="height:0.43056em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord mathit">n</span></span></span></span>, how many inversions it has if we reverse one of its subarray?</p>
|
||
<p>Formally speaking, given an integer array <span class="katex"><span class="katex-mathml"><math><mrow><mi>a</mi></mrow>a</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.43056em;"></span><span class="strut bottom" style="height:0.43056em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord mathit">a</span></span></span></span> (indices are from 0 to <span class="katex"><span class="katex-mathml"><math><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow>n-1</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.64444em;"></span><span class="strut bottom" style="height:0.72777em;vertical-align:-0.08333em;"></span><span class="base textstyle uncramped"><span class="mord mathit">n</span><span class="mbin">−</span><span class="mord mathrm">1</span></span></span></span>) which contains a permutation of integers from 1 to <span class="katex"><span class="katex-mathml"><math><mrow><mi>n</mi></mrow>n</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.43056em;"></span><span class="strut bottom" style="height:0.43056em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord mathit">n</span></span></span></span>, two elements <span class="katex"><span class="katex-mathml"><math><mrow><mi>a</mi><mo>[</mo><mi>i</mi><mo>]</mo></mrow>a[i]</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.75em;"></span><span class="strut bottom" style="height:1em;vertical-align:-0.25em;"></span><span class="base textstyle uncramped"><span class="mord mathit">a</span><span class="mopen">[</span><span class="mord mathit">i</span><span class="mclose">]</span></span></span></span> and <span class="katex"><span class="katex-mathml"><math><mrow><mi>a</mi><mo>[</mo><mi>j</mi><mo>]</mo></mrow>a[j]</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.75em;"></span><span class="strut bottom" style="height:1em;vertical-align:-0.25em;"></span><span class="base textstyle uncramped"><span class="mord mathit">a</span><span class="mopen">[</span><span class="mord mathit" style="margin-right:0.05724em;">j</span><span class="mclose">]</span></span></span></span> form an <strong>inversion</strong> if <span class="katex"><span class="katex-mathml"><math><mrow><mi>a</mi><mo>[</mo><mi>i</mi><mo>]</mo><mo>></mo><mi>a</mi><mo>[</mo><mi>j</mi><mo>]</mo></mrow>a[i] > a[j]</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.75em;"></span><span class="strut bottom" style="height:1em;vertical-align:-0.25em;"></span><span class="base textstyle uncramped"><span class="mord mathit">a</span><span class="mopen">[</span><span class="mord mathit">i</span><span class="mclose">]</span><span class="mrel">></span><span class="mord mathit">a</span><span class="mopen">[</span><span class="mord mathit" style="margin-right:0.05724em;">j</span><span class="mclose">]</span></span></span></span> and <span class="katex"><span class="katex-mathml"><math><mrow><mi>i</mi><mo><</mo><mi>j</mi></mrow>i < j</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.65952em;"></span><span class="strut bottom" style="height:0.85396em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord mathit">i</span><span class="mrel"><</span><span class="mord mathit" style="margin-right:0.05724em;">j</span></span></span></span>. Your job is to count, for each pair of <span class="katex"><span class="katex-mathml"><math><mrow><mn>0</mn><mo>≤</mo><mi>i</mi><mo>≤</mo><mi>j</mi><mo><</mo><mi>n</mi></mrow>0 \le i \le j < n</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.65952em;"></span><span class="strut bottom" style="height:0.85396em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord mathrm">0</span><span class="mrel">≤</span><span class="mord mathit">i</span><span class="mrel">≤</span><span class="mord mathit" style="margin-right:0.05724em;">j</span><span class="mrel"><</span><span class="mord mathit">n</span></span></span></span>, the number of inversions if we reverse the subarray from <span class="katex"><span class="katex-mathml"><math><mrow><mi>a</mi><mo>[</mo><mi>i</mi><mo>]</mo></mrow>a[i]</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.75em;"></span><span class="strut bottom" style="height:1em;vertical-align:-0.25em;"></span><span class="base textstyle uncramped"><span class="mord mathit">a</span><span class="mopen">[</span><span class="mord mathit">i</span><span class="mclose">]</span></span></span></span> to <span class="katex"><span class="katex-mathml"><math><mrow><mi>a</mi><mo>[</mo><mi>j</mi><mo>]</mo></mrow>a[j]</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.75em;"></span><span class="strut bottom" style="height:1em;vertical-align:-0.25em;"></span><span class="base textstyle uncramped"><span class="mord mathit">a</span><span class="mopen">[</span><span class="mord mathit" style="margin-right:0.05724em;">j</span><span class="mclose">]</span></span></span></span>.</p>
|
||
<h3 id="input-specification-">Input Specification:</h3>
|
||
<p>Each input file contains one test case. Each case consists of a positive integer <span class="katex"><span class="katex-mathml"><math><mrow><mi>n</mi></mrow>n</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.43056em;"></span><span class="strut bottom" style="height:0.43056em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord mathit">n</span></span></span></span> (<span class="katex"><span class="katex-mathml"><math><mrow><mo>≤</mo><mn>1</mn><mo separator="true">,</mo><mn>0</mn><mn>0</mn><mn>0</mn></mrow>\le 1,000</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.64444em;"></span><span class="strut bottom" style="height:0.8388800000000001em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mrel">≤</span><span class="mord mathrm">1</span><span class="mpunct">,</span><span class="mord mathrm">0</span><span class="mord mathrm">0</span><span class="mord mathrm">0</span></span></span></span>) in the first line, and a permutation of integers from 1 to <span class="katex"><span class="katex-mathml"><math><mrow><mi>n</mi></mrow>n</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.43056em;"></span><span class="strut bottom" style="height:0.43056em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord mathit">n</span></span></span></span> in the second line. The numbers in a line are separated by a single space.</p>
|
||
<h3 id="output-specification-">Output Specification:</h3>
|
||
<p>For each test case, output <span class="katex"><span class="katex-mathml"><math><mrow><mi>n</mi><mo>(</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo>)</mo><mi mathvariant="normal">/</mi><mn>2</mn></mrow>n(n + 1) / 2</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.75em;"></span><span class="strut bottom" style="height:1em;vertical-align:-0.25em;"></span><span class="base textstyle uncramped"><span class="mord mathit">n</span><span class="mopen">(</span><span class="mord mathit">n</span><span class="mbin">+</span><span class="mord mathrm">1</span><span class="mclose">)</span><span class="mord mathrm">/</span><span class="mord mathrm">2</span></span></span></span> integers in a single line. The results are for reversing subarray indicating by all possible pairs of indices <span class="katex"><span class="katex-mathml"><math><mrow><mn>0</mn><mo>≤</mo><mi>i</mi><mo>≤</mo><mi>j</mi><mo><</mo><mi>n</mi></mrow>0 \le i \le j < n</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.65952em;"></span><span class="strut bottom" style="height:0.85396em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord mathrm">0</span><span class="mrel">≤</span><span class="mord mathit">i</span><span class="mrel">≤</span><span class="mord mathit" style="margin-right:0.05724em;">j</span><span class="mrel"><</span><span class="mord mathit">n</span></span></span></span> in <span class="katex"><span class="katex-mathml"><math><mrow><mi>i</mi></mrow>i</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.65952em;"></span><span class="strut bottom" style="height:0.65952em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord mathit">i</span></span></span></span>-major order -- that is, the first <span class="katex"><span class="katex-mathml"><math><mrow><mi>n</mi></mrow>n</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.43056em;"></span><span class="strut bottom" style="height:0.43056em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord mathit">n</span></span></span></span> results are for the reverse of subarrary [0..0], [0..1], ...[0..<span class="katex"><span class="katex-mathml"><math><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow>n - 1</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.64444em;"></span><span class="strut bottom" style="height:0.72777em;vertical-align:-0.08333em;"></span><span class="base textstyle uncramped"><span class="mord mathit">n</span><span class="mbin">−</span><span class="mord mathrm">1</span></span></span></span>]; the next <span class="katex"><span class="katex-mathml"><math><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow>n - 1</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.64444em;"></span><span class="strut bottom" style="height:0.72777em;vertical-align:-0.08333em;"></span><span class="base textstyle uncramped"><span class="mord mathit">n</span><span class="mbin">−</span><span class="mord mathrm">1</span></span></span></span> results are for the reverse of subarry [1..1], [1..2],..., [1..<span class="katex"><span class="katex-mathml"><math><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow>n - 1</math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.64444em;"></span><span class="strut bottom" style="height:0.72777em;vertical-align:-0.08333em;"></span><span class="base textstyle uncramped"><span class="mord mathit">n</span><span class="mbin">−</span><span class="mord mathrm">1</span></span></span></span>] and so on.</p>
|
||
<p>All the numbers in a line must be separated by a single space, with no extra space at the beginning or the end of the line.</p>
|
||
<h3 id="sample-input-">Sample Input:</h3>
|
||
<pre><code class="lang-in">3
|
||
2 1 3
|
||
</code></pre>
|
||
<h3 id="sample-output-">Sample Output:</h3>
|
||
<pre><code class="lang-out">1 0 2 1 2 1
|
||
</code></pre>
|
||
<p><strong>Hint:</strong></p>
|
||
<p>The original array is { 2, 1, 3 }.</p>
|
||
<ul>
|
||
<li>Reversing subarray [0..0] makes { 2, 1, 3 } which has 1 inversion.</li>
|
||
<li>Reversing subarray [0..1] makes { 1, 2, 3 } which has 0 inversion.</li>
|
||
<li>Reversing subarray [0..2] makes { 3, 1, 2 } which has 2 inversions.</li>
|
||
<li>Reversing subarray [1..1] makes { 2, 1, 3 } which has 1 inversion.</li>
|
||
<li>Reversing subarray [1..2] makes { 2, 3, 1 } which has 2 inversions.</li>
|
||
<li>Reversing subarrays [2..2] makes { 2, 1, 3 } which has 1 inversion.</li>
|
||
</ul>
|
||
</div> |