<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Forum Pasja Informatyki - Najnowsze z tagiem zachlan_na_secie</title>
<link>https://forum.pasja-informatyki.pl/tag/zachlan_na_secie</link>
<description>Powered by Question2Answer</description>
<item>
<title>Zadanie Wskaźnik Hirscha finał OIG</title>
<link>https://forum.pasja-informatyki.pl/584830/zadanie-wskaznik-hirscha-final-oig</link>
<description>

&lt;p&gt;Mam problem z takim zadaniem:&amp;nbsp;&lt;a href=&quot;https://szkopul.edu.pl/problemset/problem/diIixmpgLnmLnihDYGeaDwYQ/site/?key=statement&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://szkopul.edu.pl/problemset/problem/diIixmpgLnmLnihDYGeaDwYQ/site/?key=statement&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Samo zadanie wydało mi się łatwe. Sortuje elementy od najmniejszych wymaganych publikacji i idę od góry zachłanem z setem, żeby naliczyć koszt[v] = min koszt biorąc A[v] elementów. I potem dla każdego zapytania się bin searchuję po kosztach. Napisałem kod i dostaję całą masę WA, i nie wiem, gdzie jest błąd:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;set&amp;gt;

using namespace std;
typedef long long ll;

struct Element
{
    ll ile_cytowan;
    ll cena;
    bool operator &amp;lt; (const Element &amp;amp;element) const
    {
        return ile_cytowan &amp;lt; element.ile_cytowan;
    }
};

ll n = 0, q = 0;
ll suma = 0;
vector&amp;lt;Element&amp;gt; elementy;
vector&amp;lt;ll&amp;gt; koszty;
multiset&amp;lt;ll&amp;gt; S;

inline void napelniaj()
{
    koszty.assign(n,1e18+20);
    for (int i = n-1; i &amp;gt;= 0; --i)
    {
        suma += elementy[i].cena;
        S.insert(elementy[i].cena);
        while(S.size() &amp;gt; elementy[i].ile_cytowan)
        {
            ll val = *S.rbegin();
            suma -= val;
            S.erase(S.lower_bound(val));
        }
        if (S.size() == elementy[i].ile_cytowan)
            koszty[i] = suma;
    }
}

inline ll zapytanie()
{
    ll wartosc;
    cin &amp;gt;&amp;gt; wartosc;

    int poczatek = -1, koniec = n, srodek = 0;
    while(koniec - poczatek &amp;gt; 1)
    {
        srodek = (poczatek + koniec) / 2;
        if (wartosc &amp;gt;= koszty[srodek])
            poczatek = srodek;
        else
            koniec = srodek;
    }

    if (poczatek == -1)
        return 0;
    else
        return elementy[poczatek].ile_cytowan;
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin &amp;gt;&amp;gt; n &amp;gt;&amp;gt; q;

    elementy.assign(n,{});
    for (int i = 0; i &amp;lt; n; ++i)
        cin &amp;gt;&amp;gt; elementy[i].ile_cytowan &amp;gt;&amp;gt; elementy[i].cena;
    sort(elementy.begin(), elementy.end());

    napelniaj();

    while(q--)
        cout &amp;lt;&amp;lt; zapytanie() &amp;lt;&amp;lt; '\n';

    return 0;
}
&lt;/pre&gt;



&lt;p&gt;Program zazwyczaj daje lekko za małe odpowiedzi.&lt;/p&gt;



&lt;p&gt;edit: usunąłem jednego if-a w operatorze bo i tak nic nie dawał.&lt;/p&gt;



&lt;p&gt;Z góry dziękuję za pomoc i poświęcony czas!&lt;/p&gt;</description>
<category>Algorytmy</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/584830/zadanie-wskaznik-hirscha-final-oig</guid>
<pubDate>Sun, 14 May 2023 14:48:08 +0000</pubDate>
</item>
</channel>
</rss>