<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>クエリメニュー - IQパズルステップ</title>
	<atom:link href="https://chokomon.com/tag/query_primer/feed/" rel="self" type="application/rss+xml" />
	<link>https://chokomon.com</link>
	<description>ちょこっと頭を良くするIQパズル問題集</description>
	<lastBuildDate>Sun, 11 Sep 2022 13:43:09 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://chokomon.com/wp-content/uploads/2022/02/cropped-icon512-32x32.png</url>
	<title>クエリメニュー - IQパズルステップ</title>
	<link>https://chokomon.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【クエリメニュー】点の幅 (paizaランク A)-解答例-PHP編</title>
		<link>https://chokomon.com/17-query_primer-04-03-00625/</link>
					<comments>https://chokomon.com/17-query_primer-04-03-00625/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Sat, 10 Sep 2022 02:59:30 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クエリメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクA]]></category>
		<category><![CDATA[難易度-1800]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6740</guid>

					<description><![CDATA[【クエリメニュー】> FINAL問題 点の幅 (paizaランク A 相当) [難易度: 1878 ±36] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/17-query_primer/">クエリメニュー</a>】> <a href="https://paiza.jp/works/mondai/query_primer/query_primer__range_of_score" target="_blank" rel="noreferrer noopener">FINAL問題 点の幅 (paizaランク A 相当)</a> [難易度: <strong>1878 ±36</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img fetchpriority="high" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/09/17-04-03-01.png" alt="" class="wp-image-6741"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>テストの返却中に暇だった paiza 君は、また 2 人で遊ぶゲームを思いつきました。</p>



<p>「2 人はそれぞれ生徒番号 1 〜 N の全校生徒 N 人の中から生徒番号が連続するように好きな人数の生徒を選ぶ。その選んだ生徒達の得点の幅が大きい方、すなわちその生徒たちの (最高点 - 最低点) の値が大きい方が勝ち、同じだったら引き分け！」</p>



<p>「ただし、このルールだと人を多く選ぶ方が有利になってしまうから、選べる生徒の数はお互い N/2 人以下ね！」</p>



<p>また審判を任されたあなたは、全ての生徒の得点を記録しておくことで、選んだ生徒たちの最小・最大の生徒番号を確認するだけで、その生徒たちの中の (最高点 - 最低点) の値をすぐに求めることができることに気付きました。</p>



<p>学校の生徒数 N と試合の数 K , 各生徒の得点 S_1 ... S_N と、<br>i 番目の試合で対戦した A と B の 2 人が選んだ生徒の最小の生徒番号と最大の生徒番号が与えられるので、各試合のジャッジをしてください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>4 2<br>1<br>3<br>2<br>4<br>1 2 2 3<br>1 2 3 4</p>



<p><strong>出力値（例）</strong><br>A<br>DRAW</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    list($n, $k) = explode(" ", trim(fgets(STDIN)));
    
    for ($i=1; $i&lt;$n; $i++) {
        if ($i * $i == $n) {
            $root = $i;
            break;
        }
    }

    for ($i=0; $i&lt;$n; $i++) {
        $s[$i] = trim(fgets(STDIN));
    }

    for ($i=0; $i&lt;$root; $i++) {
        for ($j=0; $j&lt;$root; $j++) {
            if ($j == 0) {
                $range_max[$i] = $s[$i*$root];
                $range_min[$i] = $s[$i*$root];
            } else {
                $range_max[$i] = max($range_max[$i], $s[$i*$root+$j]);
                $range_min[$i] = min($range_min[$i], $s[$i*$root+$j]);
            }
        }
    }
    
    for ($i=0; $i&lt;$k; $i++) {
        list($al, $ar, $bl, $br) = explode(" ", trim(fgets(STDIN)));
        $al--;
        $ar--;
        $amx = $s[$al];
        $amn = $s[$al];
        $anow = $al;

        while ($anow &lt;= $ar) {
            if ($anow%$root == 0 &amp;&amp; $anow+$root-1 &lt;= $ar) {
                $amx = max($amx, $range_max[$anow/$root]);
                $amn = min($amn, $range_min[$anow/$root]);
                $anow += $root;
            } else {
                $amx = max($amx, $s[$anow]);
                $amn = min($amn, $s[$anow]);
                $anow++;
            }
        }

        $bl--;
        $br--;
        $bmx = $s[$bl];
        $bmn = $s[$bl];
        $bnow = $bl;

        while ($bnow &lt;= $br) {
            if ($bnow%$root == 0 &amp;&amp; $bnow+$root-1 &lt;= $br) {
                $bmx = max($bmx, $range_max[$bnow/$root]);
                $bmn = min($bmn, $range_min[$bnow/$root]);
                $bnow += $root;
            } else {
                $bmx = max($bmx, $s[$bnow]);
                $bmn = min($bmn, $s[$bnow]);
                $bnow++;
            }
        }

        if ($amx-$amn == $bmx-$bmn) {
            $result = "DRAW";
        } elseif ($amx-$amn &gt; $bmx-$bmn) {
            $result = "A";
        } else {
            $result = "B";
        }
    
        echo $result. "\n";
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="660" height="200" src="https://chokomon.com/wp-content/uploads/2022/09/17-04-03-02.png" alt="" class="wp-image-6742"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/17-query_primer-04-03-00625/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【クエリメニュー】ドーナツ (paizaランク A)-解答例-PHP編</title>
		<link>https://chokomon.com/17-query_primer-04-02-00620/</link>
					<comments>https://chokomon.com/17-query_primer-04-02-00620/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Wed, 07 Sep 2022 22:11:46 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クエリメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクA]]></category>
		<category><![CDATA[難易度-1900]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6711</guid>

					<description><![CDATA[【クエリメニュー】> 【点の幅】STEP: 2 ドーナツ (paizaランク A 相当) [難易度: 1927 ±36] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/17-query_primer/">クエリメニュー</a>】> <a href="https://paiza.jp/works/mondai/query_primer/query_primer__dount" target="_blank" rel="noreferrer noopener">【点の幅】STEP: 2 ドーナツ (paizaランク A 相当)</a> [難易度: <strong>1927 ±36</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/09/17-04-02-01.png" alt="" class="wp-image-6713"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>あなたはドーナツ屋 paiza の店員です. この店では, チョコが埋め込まれた四角のドーナツが名物となっています.</p>



<p>H x W cm^2 の生地があります. これは 1 cm^2 ごとに区画されており, H x W 個の区画を持っています.<br>また, それぞれの区間には既にいくつかのチョコが散りばめられています.</p>



<p>この 1 枚の生地から四角いドーナツの形を 1 つ切り出すことができます.<br>具体的には次の工程をおこないます.</p>



<p>1. 上から y 番目、 左から x 番目の区間を中心に一辺が B cm の正方形の切れ目を入れる。<br>2. 上から y 番目、 左から x 番目の区間を中心に一辺が S cm の正方形の切れ目を入れることでドーナツ状の切れ目を完成させる。（S &lt; B であることが保証されています）</p>



<p>生地を成す H*W 個の各区画について、その区画に含まれるチョコの数と、作る N 個のドーナツについての情報が与えられるので、各ドーナツにチョコがいくつ含まれることになるかを求めてください。<br>なお、 N 枚の生地について、含まれるチョコの分布は全て同じであることがわかっています。</p>



<p>例として、入力例 1 では、生地は 3 × 3 cm^2 であり、次の通り区画されています。</p>



<p>このドーナツに乗っているチョコの数は 40 個であるので、答えとして 40 を出力してください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>3 3 1<br>1 2 3<br>4 5 6<br>7 8 9<br>2 2 3 1</p>



<p><strong>出力値（例）</strong><br>40</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    list($h, $w, $n) = explode(" ", trim(fgets(STDIN)));
    
    for ($i=0; $i&lt;$h; $i++) {
        $a[] = explode(" ", trim(fgets(STDIN)));
        for ($j=0; $j&lt;$w; $j++) {
            $sum[$i][$j] = $a[$i][$j];
            
            if ($i&gt;0) $sum[$i][$j] += $sum[$i-1][$j];
            if ($j&gt;0) $sum[$i][$j] += $sum[$i][$j-1];
            if ($i&gt;0 &amp;&amp; $j&gt;0) $sum[$i][$j] -= $sum[$i-1][$j-1];
        }
    }
    //print_r($sum);
    
    for ($i=0; $i&lt;$n; $i++) {
        list($y, $x, $b, $s) = explode(" ", trim(fgets(STDIN)));
        $y--; $x--;
        
        $ans = $sum[$y+$b/2][$x+$b/2];
        
        if ($y+$b/2-$b&gt;=0) $ans-=$sum[$y+$b/2-$b][$x+$b/2];
        if ($x+$b/2-$b&gt;=0) $ans-=$sum[$y+$b/2][$x+$b/2-$b];
        if ($y+$b/2-$b&gt;=0 &amp;&amp; $x+$b/2-$b&gt;=0)
                $ans+=$sum[$y+$b/2-$b][$x+$b/2-$b];
        
        $ans-=$sum[$y+$s/2][$x+$s/2];
        
        if ($y+$s/2-$s&gt;=0) $ans+=$sum[$y+$s/2-$s][$x+$s/2];
        if ($x+$s/2-$s&gt;=0) $ans+=$sum[$y+$s/2][$x+$s/2-$s];
        if ($y+$s/2-$s&gt;=0 &amp;&amp; $x+$s/2-$s&gt;=0)
                $ans-=$sum[$y+$s/2-$s][$x+$s/2-$s];
        
        printf("%d\n", $ans);
    }   
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="160" src="https://chokomon.com/wp-content/uploads/2022/09/17-04-02-02.png" alt="" class="wp-image-6714"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/17-query_primer-04-02-00620/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【クエリメニュー】&#039;I&#039; の数 (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/17-query_primer-04-01-00615/</link>
					<comments>https://chokomon.com/17-query_primer-04-01-00615/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Wed, 07 Sep 2022 08:19:49 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クエリメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-1900]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6676</guid>

					<description><![CDATA[【クエリメニュー】> 【点の幅】STEP: 1 'I' の数 (paizaランク B 相当) [難易度: 1954 ±33] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/17-query_primer/">クエリメニュー</a>】> <a href="https://paiza.jp/works/mondai/query_primer/query_primer__word_count" target="_blank" rel="noreferrer noopener">【点の幅】STEP: 1 'I' の数 (paizaランク B 相当)</a> [難易度: <strong>1954 ±33</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/09/17-04-01-01.png" alt="" class="wp-image-6677"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>英語の授業中に暇だった paiza 君は、N ページの教科書を使った次のようなゲームを思いつきました。</p>



<p>「2人のプレイヤーがそれぞれ教科書の 1 箇所を適当に掴んで、掴んだ範囲のページに含まれる 'I' の合計数が多い方が勝ち、少ない方が負け、同じだったら引き分け！」<br>「ただし、 N/3 ページ以上掴んだ人は反則負けで、 2 人とも反則したら引き分け！」<br>(ここでの N/3 は整数であるとは限りません)</p>



<p>審判を任されたあなたは、各ページに含まれる 'I' の数を記録しておくことで、掴んだページの両端の番号を確認するだけで、掴んだ範囲のページに含まれる 'I' の合計数を求めることができることに気付きました。</p>



<p>教科書のページ数 N と試合の数 K , 各ページの 'I' の数 I_1 ... I_N と、<br>i 番目の試合で対戦した A と B の 2 人が掴んだページの両端のページ番号 A_l_i, A_r_i , B_l_i, B_r_iが与えられるので、各試合のジャッジしてください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>3 3<br>0<br>1<br>2<br>1 1 2 2<br>2 2 3 3<br>3 3 3 3</p>



<p><strong>出力値（例）</strong><br>DRAW<br>DRAW<br>DRAW</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    list($n, $k) = explode(" ", trim(fgets(STDIN)));
    
    $page_min = ($n/3.0);
    $sum[0] = 0;

    for ($i=0; $i&lt;$n; $i++) {
        $a = trim(fgets(STDIN));
        $sum[$i+1] = $sum[$i] + $a;
    }
    
    for ($i=0; $i&lt;$k; $i++) {
        list($al, $ar, $bl, $br) = explode(" ", trim(fgets(STDIN)));
    
        $pagea = $ar-$al+1;
        $pageb = $br-$bl+1;
    
        if ($page_min &lt;= $pagea) {
          if ($page_min &lt;= $pageb) {
            $result = "DRAW";
          } else {
            $result = "B";
          }
        } else {
          if ($page_min &lt;= $pageb) {
            $result = "A";
          } else {
            if ($sum[$ar]-$sum[$al-1] &gt; $sum[$br]-$sum[$bl-1]) {
              $result = "A";
            } elseif ($sum[$ar]-$sum[$al-1] &lt; $sum[$br]-$sum[$bl-1]) {
              $result = "B";
            } else {
              $result = "DRAW";
            }
          }
        }
        echo $result. "\n";
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="200" src="https://chokomon.com/wp-content/uploads/2022/09/17-04-01-02.png" alt="" class="wp-image-6678"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/17-query_primer-04-01-00615/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【クエリメニュー】平方分割 (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/17-query_primer-03-06-00607/</link>
					<comments>https://chokomon.com/17-query_primer-03-06-00607/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Thu, 01 Sep 2022 19:09:20 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クエリメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-2000以上]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6618</guid>

					<description><![CDATA[【クエリメニュー】> FINAL問題 平方分割 (paizaランク B 相当) [難易度: 2188 ±43] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/17-query_primer/">クエリメニュー</a>】> <a rel="noreferrer noopener" href="https://paiza.jp/works/mondai/query_primer/query_primer__square_division" target="_blank">FINAL問題 平方分割 (paizaランク B 相当)</a> [難易度: <strong>2188 ±43</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/09/17-03-06-01.png" alt="" class="wp-image-6619"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>paiza くんは、長さ N の整数列 A の区間 A[l_i] ... A[r_i] の最大の要素の値を K 回求めたいのですが、与えられる区間の要素をいちいち全て調べていては時間計算量にして最大で O(NK) かかってしまいます。<br>そこで、paiza くんは 平方分割 と言われるアルゴリズムを用いることで、この計算量を減らそうと考えました。<br>平方分割とは、次のようなアルゴリズムです。</p>



<p>1. 長さ N の配列が与えられたとき、N の平方根を x を求め、配列を長さ x の配列に分割し、それぞれの配列について目的の値を調べておく。<br>（分割で得られる最後の配列の長さは必ずしも x になるとは限りません）<br>2. 調べたい区間に完全に含まれている配列についての 1. で求めた値と、その配列以外の部分の値を全て調べて、目的の値を求める。</p>



<p>この問題では、長さ 10,000 の数列 A について手順 2. までやってみましょう。</p>



<p></p>



<p><strong>入力値（例）</strong><br>3<br>74769<br>-62958<br>6542<br>-93191<br>-6767<br>-5945<br>65384<br>-97133<br>85447<br>-80479<br>...<br>7984 9087<br>8855 9824<br>8228 8478</p>



<p><strong>出力値（例）</strong><br>99983<br>99983<br>99948</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    for ($i=1; $i&lt;10000; $i++) {
        if ($i*$i&gt;=10000) {
          $root = $i;
          break;
        }
    }
    
    $k = trim(fgets(STDIN));
    
    for ($i=0; $i&lt;10000; $i++) {
        $a[$i] = trim(fgets(STDIN));
    }
    
    for ($i=0; $i&lt;$root; $i++) {
        for ($j=0; $j&lt;$root; $j++) {
            if ($j==0) {
                $range_max[$i] = $a[$i*$root];
            } else {
                $range_max[$i] = max($range_max[$i], $a[$i*$root+$j]);
            }
        }
    }
    
    for ($i=0; $i&lt;$k; $i++) {
        $ans = 0;
        list($l, $r) = explode(" ", trim(fgets(STDIN)));
        $l--;
        $r--;
        $ans = $a[$l];
        $now = $l;
    
        while ($now&lt;=$r) {
          if ($now%$root==0 &amp;&amp; $now+$root-1 &lt;= $r) {
            $ans = max($ans, $range_max[$now / $root]);
            $now += $root;
          } else {
            $ans = max($ans, $a[$now]);
            $now++;
          }
        }
        echo $ans. "\n";
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="200" src="https://chokomon.com/wp-content/uploads/2022/09/17-03-06-02.png" alt="" class="wp-image-6620"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/17-query_primer-03-06-00607/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【クエリメニュー】平方分割のバケット (paizaランク C)-解答例-PHP編</title>
		<link>https://chokomon.com/17-query_primer-03-05-00606/</link>
					<comments>https://chokomon.com/17-query_primer-03-05-00606/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Wed, 31 Aug 2022 19:43:13 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クエリメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクC]]></category>
		<category><![CDATA[難易度-1500]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6613</guid>

					<description><![CDATA[【クエリメニュー】> 【平方分割】STEP: 5 平方分割のバケット (paizaランク C 相当) [難易度: 1543 ±31] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/17-query_primer/">クエリメニュー</a>】> <a href="https://paiza.jp/works/mondai/query_primer/query_primer__square_division_bucket" target="_blank" rel="noreferrer noopener">【平方分割】STEP: 5 平方分割のバケット (paizaランク C 相当)</a> [難易度: <strong>1543 ±31</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/09/17-03-05-01.png" alt="" class="wp-image-6614"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>paiza くんは、長さ N の数列のある区間に含まれる要素の最大値を K 回求めたいのですが、与えられる区間の要素をいちいち全て調べていては時間計算量にして最大で O(NK) かかってしまいます。<br>そこで、paiza くんは 平方分割 と言われるアルゴリズムを用いることで、この計算量を減らそうと考えました。<br>平方分割とは、次のようなアルゴリズムです。</p>



<p>1. 長さ N の配列が与えられたとき、N の平方根 x を求め、配列を長さ x の配列に分割し、それぞれの配列について目的の値を調べておく。<br>（分割で得られる最後の配列の長さは必ずしも x になるとは限りません）<br>2. 調べたい区間に完全に含まれている配列についての 1. で求めた値と、その配列以外の部分の値を全て調べて、目的の値を求める。</p>





<p>この問題では、長さ 10,000 の数列 A について手順 1. を行ってみましょう。<br>10,000 の平方根は 100 なので、先頭から 100 要素ずつの最大値を求めましょう。</p>



<p></p>



<p>入力値（例）<br>74769<br>-62958<br>6542<br>-93191<br>-6767<br>-5945<br>65384<br>-97133<br>85447<br>-80479<br>...</p>



<p>出力値（例）<br>99070<br>99686<br>97400<br>98349<br>98202<br>95846<br>97976<br>98004<br>96188<br>96561<br>...</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    for ($i=0; $i&lt;10000; $i++) {
        $a[] = trim(fgets(STDIN));
    }
    
    for ($i=0; $i&lt;100; $i++) {
        for ($j=0; $j&lt;100; $j++) {
            if ($j==0) {
                $ans[$i] = $a[$i *100];
            } else {
                $ans[$i] = max($ans[$i], $a[$i*100+$j]);
            }
        }
    }
    
    for ($i=0; $i&lt;100; $i++) {
        printf("%d\n", $ans[$i]);
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="800" src="https://chokomon.com/wp-content/uploads/2022/09/17-03-05-02.png" alt="" class="wp-image-6615"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/17-query_primer-03-05-00606/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【クエリメニュー】二次元区間和 (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/17-query_primer-03-04-00605/</link>
					<comments>https://chokomon.com/17-query_primer-03-04-00605/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Wed, 31 Aug 2022 18:29:42 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クエリメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-1700]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6607</guid>

					<description><![CDATA[【クエリメニュー】> 【平方分割】STEP: 4 二次元区間和 (paizaランク B 相当) [難易度: 1725 ±29] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/17-query_primer/">クエリメニュー</a>】> <a href="https://paiza.jp/works/mondai/query_primer/query_primer__two_dimensions_interval_sum" target="_blank" rel="noreferrer noopener">【平方分割】STEP: 4 二次元区間和 (paizaランク B 相当)</a> [難易度: <strong>1725 ±29</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/09/17-03-04-01.png" alt="" class="wp-image-6608"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>H 行 W 列 の行列 A の 2 つの行・列番号の組 {a , b} , {c , d} における区間和 S({a,b} , {c,d}) (a ≦ c , b ≦ d) を以下の数式・図の通り定義します。以後 A の y 行 x 列の要素を A[y][x] と表すことにします。</p>



<p>S({a,b} , {c,d}) = A[a][b] + A[a][b+1] + ... + A[a][d] + A[a+1][1] + ... + A[a+1][d] + ... + A[c][1] + ... + A[c][d]



<p>例として、入力例 1 の A における S({2,2},{3,3}) は以下の通りになり、値は 28 となります。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://chokomon.com/wp-content/uploads/2022/09/1.jpeg" alt="" class="wp-image-6609" width="512" height="384" srcset="https://chokomon.com/wp-content/uploads/2022/09/1.jpeg 1024w, https://chokomon.com/wp-content/uploads/2022/09/1-768x576.jpeg 768w" sizes="auto, (max-width: 512px) 100vw, 512px" /></figure>



<p>H 行 W 列 の行列 A と、区間和を求めたいペアについての情報が与えられるので、各ペアについて累積和を求めてください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>3 3 2<br>1 2 3<br>4 5 6<br>7 8 9<br>1 1 3 3<br>1 2 2 3</p>



<p><strong>出力値（例）</strong><br>45<br>16</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    list($h, $w, $n) = explode(" ", trim(fgets(STDIN)));
    
    $sum = [[]];
    
    for ($i = 0; $i &lt; $h; $i++) {
        $a[$i] = explode(" ", trim(fgets(STDIN)));
        
        for ($j = 0; $j &lt; $w; $j++) {
            $sum[$i][$j] = $a[$i][$j];
            
            if (0 &lt; $i) $sum[$i][$j] += $sum[$i-1][$j];
            if (0 &lt; $j) $sum[$i][$j] += $sum[$i][$j-1];
            if (0 &lt; $i &amp;&amp; 0 &lt; $j) $sum[$i][$j] -= $sum[$i-1][$j-1];
        }
    }
    //print_r($sum);
    
    for ($i = 0; $i &lt; $n; $i++) {
        list($a, $b, $c, $d) = explode(" ", trim(fgets(STDIN)));
        
        $a--; $b--; $c--; $d--;
        
        if ($a&gt;0 &amp;&amp; $b&gt;0) {
            $ans = $sum[$c][$d]+$sum[$a-1][$b-1]-$sum[$a-1][$d]-$sum[$c][$b-1];
        } else if ($a==0 &amp;&amp; $b&gt;0) {
            $ans = $sum[$c][$d]-$sum[$c][$b-1];
        } else if ($a&gt;0 &amp;&amp; $b==0) {
            $ans = $sum[$c][$d]-$sum[$a-1][$d];
        } else if($a==0 &amp;&amp; $b==0) {
            $ans = $sum[$c][$d];
        }
        
        printf("%d\n",$ans);
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="200" src="https://chokomon.com/wp-content/uploads/2022/09/17-03-04-02.png" alt="" class="wp-image-6610"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/17-query_primer-03-04-00605/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【クエリメニュー】二次元累積和 (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/17-query_primer-03-03-00604/</link>
					<comments>https://chokomon.com/17-query_primer-03-03-00604/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Tue, 30 Aug 2022 19:58:09 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クエリメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-1800]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6599</guid>

					<description><![CDATA[【クエリメニュー】&#62; 【平方分割】STEP: 3 二次元累積和 (paizaランク B 相当)&#160;[難易度:&#160;1825&#160;±29] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a rel="noreferrer noopener" href="https://chokomon.com/paiza_mondai/17-query_primer/" target="_blank">クエリメニュー</a>】&gt; <a href="https://paiza.jp/works/mondai/query_primer/query_primer__two_dimensions_cumulative__sum" target="_blank" rel="noreferrer noopener">【平方分割】STEP: 3 二次元累積和 (paizaランク B 相当)</a>&nbsp;[難易度:&nbsp;<strong>1825&nbsp;±29</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/08/17-03-03-01.png" alt="" class="wp-image-6600"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>H 行 W 列 の行列 A の y 行 x 列における累積和 S(y,x) を以下の数式・図の通り定義します。以後 A の y 行 x 列の要素を A[y][x] と表すことにします。</p>



<p>S(y,x) = A[1][1] + A[1][2] + ... + A[1][x] + A[2][1] + ... + A[2][x] + ... + A[y][1] + ... + A[y][x]



<p>H 行 W 列 の二次元配列 A と、累積和を求めたい行・列番号についての情報が与えられるので、各ペアについて累積和を求めてください。<br>例として、入力例 1 の行列における累積和 S(2,2) は次のピンクの部分の和となり、<code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">S(2,2) = 12</mark></code>&nbsp;となります。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://chokomon.com/wp-content/uploads/2022/08/5.jpeg" alt="" class="wp-image-6601" width="512" height="384" srcset="https://chokomon.com/wp-content/uploads/2022/08/5.jpeg 1024w, https://chokomon.com/wp-content/uploads/2022/08/5-768x576.jpeg 768w" sizes="auto, (max-width: 512px) 100vw, 512px" /></figure>



<p></p>



<p><strong>入力値（例）</strong><br>3 3 3<br>1 2 3<br>4 5 6<br>7 8 9<br>1 1<br>2 2<br>3 3</p>



<p><strong>出力値（例）</strong><br>1<br>12<br>45</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    list($h, $w, $n) = explode(" ", trim(fgets(STDIN)));
    
    $sRow = array_fill(0, $h+1, 0);
    $s = array_fill(0, $w+1, $sRow);
    
    for ($i=0; $i&lt;$h; $i++) {
        $a[$i] = explode(" ", trim(fgets(STDIN)));
        
        for ($j=0; $j&lt;$w; $j++) {
            $s[$i+1][$j+1] = $a[$i][$j]+$s[$i][$j+1]+$s[$i+1][$j]-$s[$i][$j];
        }
    }
    //print_r($s);
    
    for ($i=0; $i&lt;$n; $i++) {
        list($y, $x) = explode(" ", trim(fgets(STDIN)));
        printf("%d\n", $s[$y][$x]);
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="200" src="https://chokomon.com/wp-content/uploads/2022/08/17-03-03-02.png" alt="" class="wp-image-6602"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/17-query_primer-03-03-00604/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【クエリメニュー】区間和 (paizaランク C)-解答例-PHP編</title>
		<link>https://chokomon.com/17-query_primer-03-02-00603/</link>
					<comments>https://chokomon.com/17-query_primer-03-02-00603/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Mon, 29 Aug 2022 20:22:06 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クエリメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクC]]></category>
		<category><![CDATA[難易度-1500]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6594</guid>

					<description><![CDATA[【クエリメニュー】> 【平方分割】STEP: 2 区間和 (paizaランク C 相当) [難易度: 1569 ±27] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例 解説 この問題も累積和と同じように、受け取…]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/17-query_primer/">クエリメニュー</a>】> <a href="https://paiza.jp/works/mondai/query_primer/query_primer__interval_sum" target="_blank" rel="noreferrer noopener">【平方分割】STEP: 2 区間和 (paizaランク C 相当)</a> [難易度: <strong>1569 ±27</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/08/17-03-02-01.png" alt="" class="wp-image-6595"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>長さ N の数列 A と、K 個の区間 (l_1,r_1) ... (l_K,r_K) が与えられるので、各区間についての A の区間和 A_{l_i} + ... + A_{r_i} (1 ≦ i ≦ K) を求めてください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>4 2<br>16<br>88<br>10<br>-65<br>2 4<br>1 2</p>



<p><strong>出力値（例）</strong><br>33<br>104</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    list($n, $k) = explode(" ", trim(fgets(STDIN)));
    
    $ans[] = 0;
    
    for ($i = 1; $i &lt;= $n; $i++) {
        $a[$i] = trim(fgets(STDIN));
        
        if ($i == 1) {
            $ans[$i] = $a[$i];
        } else {
            $ans[$i] = $ans[$i-1] + $a[$i];
        }
    }
    
    //print_r($ans);
    
    for ($i = 0; $i &lt; $k; $i++) {
        list($k1, $k2) = explode(" ", trim(fgets(STDIN)));
        
        $result = $ans[$k2] - $ans[$k1-1];
        echo $result. "\n";
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="200" src="https://chokomon.com/wp-content/uploads/2022/08/17-03-02-02.png" alt="" class="wp-image-6596"/></figure>



<h2 class="wp-block-heading">解説</h2>



<p>この問題も累積和と同じように、受け取った整数aを先に計算しておきます。</p>



<figure class="wp-block-table"><table><tbody><tr><td>ans[0]</td><td>0</td><td>0</td></tr><tr><td>ans[1]</td><td>16</td><td>16</td></tr><tr><td>ans[2]</td><td>88</td><td>ans[2-1](16)+a[2](88)=104</td></tr><tr><td>ans[3]</td><td>10</td><td>ans[3-1](104)+a[3](10)=114</td></tr><tr><td>ans[4]</td><td>-65</td><td>ans[4-1](114)+a[4](-65)=49</td></tr></tbody></table></figure>



<p>次に受け取った整数k1とk2を計算（ans[k2]-ans[k1-1])して出力します。</p>



<p>入力値（例）でいえば、<br>4 2は、ans[4](49)-ans[1](16)=33<br>1 2は、ans[2](104)-ans[0](0)=104<br>となります。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/17-query_primer-03-02-00603/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【クエリメニュー】累積和 (paizaランク C)-解答例-PHP編</title>
		<link>https://chokomon.com/17-query_primer-03-01-00602/</link>
					<comments>https://chokomon.com/17-query_primer-03-01-00602/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Mon, 29 Aug 2022 02:29:38 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クエリメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクC]]></category>
		<category><![CDATA[難易度-1700]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6589</guid>

					<description><![CDATA[【クエリメニュー】> 【平方分割】STEP: 1 累積和 (paizaランク C 相当) [難易度: 1753 ±26] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例 解説 長さNの数列AとK行の整数Qが与えら…]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/17-query_primer/">クエリメニュー</a>】> <a href="https://paiza.jp/works/mondai/query_primer/query_primer__cumulative_sum" target="_blank" rel="noreferrer noopener">【平方分割】STEP: 1 累積和 (paizaランク C 相当)</a> [難易度: <strong>1753 ±26</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/08/17-03-01-01.png" alt="" class="wp-image-6590"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>長さ N の数列 A と、K 個の整数 Q_1 ... Q_K が与えられるので、各整数 Q_i (1 ≦ i ≦ K) について A_1 ... A_{Q_i} の和を求めてください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>3 1<br>69<br>12<br>28<br>3</p>



<p><strong>出力値（例）</strong><br>109</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    list($n, $k) = explode(" ", trim(fgets(STDIN)));
    
    $ans = [];
    
    for ($i = 0; $i &lt; $n; $i++) {
        $a[$i] = trim(fgets(STDIN));
        
        if ($i == 0) {
            $ans[$i] = $a[$i];

        } else {
            $ans[$i] = $ans[$i-1] + $a[$i];
        }
    }
    //print_r($ans);
    
    for ($i = 0; $i &lt; $k; $i++) {
        $q = trim(fgets(STDIN));
        echo $ans[$q-1]. "\n";
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="160" src="https://chokomon.com/wp-content/uploads/2022/08/17-03-01-02.png" alt="" class="wp-image-6591"/></figure>



<h2 class="wp-block-heading">解説</h2>



<p>長さNの数列AとK行の整数Qが与えられ、数列Aの最初から整数Qまで合計を出力する問題。<br>入力値（例）の例でいうと、整数Qが2だった場合は、数列Aの1番目の69と数列Aの2番目の12で69+12=81になります。</p>



<p>まず、数列Aを受け取ったとき、iが0の場合（一番初めの数値）は配列ansに格納します。次からの数列Aは、[i-1]、つまり前の配列に足して格納します。</p>



<figure class="wp-block-table"><table><tbody><tr><td>ans[0]</td><td>69</td><td>69</td></tr><tr><td>ans[1]</td><td>12</td><td>ans[1-1](69)+a[1](12)=81</td></tr><tr><td>ans[2]</td><td>28</td><td>ans[2-1](81)+a[2](28)=109</td></tr></tbody></table></figure>



<p>配列ansにすでに合計した値が入っているので、整数Qを受け取ったら、そのまま配列ans[Q]で出力します。</p>



<p></p>



<p>整数Qを受け取ってから、A_1からA_Qまでの和をいちいち計算していたらタイムオーバーになってしまいました。この問題で累積和の意味が少し分かりました。(*'ω'*)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/17-query_primer-03-01-00602/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【クエリメニュー】Vtuber (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/17-query_primer-02-05-00601/</link>
					<comments>https://chokomon.com/17-query_primer-02-05-00601/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Sun, 28 Aug 2022 22:28:55 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クエリメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-2000以上]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6584</guid>

					<description><![CDATA[【クエリメニュー】> FINAL問題 Vtuber (paizaランク B 相当) [難易度: 2139 ±36] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/17-query_primer/">クエリメニュー</a>】> <a href="https://paiza.jp/works/mondai/query_primer/query_primer__vtuber" target="_blank" rel="noreferrer noopener">FINAL問題 Vtuber (paizaランク B 相当)</a> [難易度: <strong>2139 ±36</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/08/17-02-05-01.png" alt="" class="wp-image-6585"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>あなたは流行に乗っかり、Vtuber としての活動をスタートしました。活動も軌道にのり、配信をするたびに視聴者が superchat を送ってくれたり、メンバーシップ制度に加入してくれるようになりました。<br>（わからない方は 「youtube superchat」「youtube membership」 などで検索してみてください。）<br>あなたはお礼として superchat を読むお礼配信をおこなうことにしました。<br>その配信で、前回の配信の superchat の総額が高いアカウントから順に、superchat をした全てのアカウントの名前を読んだ後、メンバーシップに入ってくれた全てのアカウントの名前を辞書順昇順で読むことにしました。<br>superchat の金額が同じ場合、同じ金額の中で辞書順降順でアカウント名を読むことにしました。<br>前回の配信の superchat とメンバーシップ加入の履歴が与えられるので、読む順番にアカウント名を出力するプログラムを作成してください。</p>



<p></p>



<p>・1 行目では、superchat とメンバーシップ加入の回数の和 N が与えられます。<br>・続く N 行のうち、 i 行目では、i 番目のイベントの内容 E_i が以下のいずれかの形式で与えれられます。</p>



<p><code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">name give money !</mark></code><br>name さんが money 円の superchat を送ったことを表す。</p>



<p><code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">name join membership!</mark></code><br>name さんがメンバーシップに加入したことを表す。</p>



<p></p>



<p><strong>入力値（例）</strong><br>5<br>aiueo give 2489 !<br>kk join membership!<br>coffee_addiction join membership!<br>so_cute give 837 !<br>yoyo give 9284 !</p>



<p></p>



<p><strong>出力値（例）</strong><br>yoyo<br>aiueo<br>so_cute<br>coffee_addiction<br>kk</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    $n = trim(fgets(STDIN));
    
    $member = [];
    $chat = [];
    
    for ($i = 0; $i &lt; $n; $i++) {
        $event = explode(" ", trim(fgets(STDIN)));
        
        $name = $event[0];
        $verb = $event[1];
        
        if ($verb == "join") {
            array_push($member, $event[0]);
            
        } else {
            $money = $event[2];
            
            if (isset($chat[$name])) {
                $chat[$name] = array($chat[$name][0]+$money, $name);
                
            } else {
                $chat[$name] = array($money, $name);
            }
        }
    }
    
    //print_r($chat);
    
    rsort($chat);
    sort($member);
    
    foreach ($chat as $key =&gt; $value) {
        echo $value[1]. "\n";
    }
    
    foreach ($member as $value) {
        echo $value. "\n";
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="240" src="https://chokomon.com/wp-content/uploads/2022/08/17-02-05-02.png" alt="" class="wp-image-6586"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/17-query_primer-02-05-00601/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
