31952023-02-22 11:42:48rennSzurikáta (45)cpp17Futási hiba 0/45400ms4928 KiB
#include <bits/stdc++.h>
using namespace std;

#define GOTTAGOFAST cin.tie(0); cout.tie(0); ios::sync_with_stdio(0);

int main()
{
    GOTTAGOFAST

    int n, fa, q;
    cin >> n >> fa >> q;
    vector<int> uregek(n+1);
    vector<int> uregmag(n+1);
    vector<double> meredeksegek(n+1);

    vector<double> maxmer(n+1);

    for (int i = 1; i <= n; i++)
    {
        cin >> uregek[i];
    }

    int latjak = 0;
    double prev = INT_MIN, mer_temp, nmer_temp;

    for (int i = 1, j; i <= n; i++)
    {
        cin >> j;
        uregmag.at(i) = j; 
        meredeksegek.at(i) = (double)(j-fa)/(double)uregek.at(i);
        if(meredeksegek.at(i) > prev)
        {
            prev = meredeksegek.at(i);
            latjak++;
        }
        maxmer.at(i) = prev;
    }
    
    for(int i = 0, k, szi, mag, cnt, nszi, nmag; i < q; i++) // végigmegy az eseteken
    {
        cnt = latjak;

        cin >> k;
        k--;
        cin >> szi >> mag;
        prev = maxmer.at(szi);
        mer_temp = (double)(mag+uregmag.at(szi)-fa)/(double)uregek.at(szi);

        if(k == 0) // ha csak 1 szurikáta kukucskál
        {
            // ha számít a magasságváltozás
            if(mer_temp > prev)
            {
                // ha korábban nem látta, de már igen
                if(maxmer.at(szi) >= meredeksegek.at(szi))
                {
                    cnt += (maxmer.at(szi) <= maxmer.at(szi+1));
                }

                prev = mer_temp;

                // ameddig kisebbet találok
                while((++szi <= n) && maxmer.at(szi) < mer_temp)
                {
                    // ha a pont azelőtt csúcs volt, a látok számát csökkentem
                    if(maxmer.at(szi) > maxmer.at(szi-1))
                    {
                        cnt--;
                    }
                }
            }
            cout << cnt << " ";
            continue;
        }

        for (k; k>0; k--) // ahány szurikáta éppen kukucskál-1
        {
            cin >> nszi >> nmag;

            nmer_temp = (double)(nmag+uregmag.at(nszi)-fa)/(double)uregek.at(nszi);
            // ha számít a magasságváltozás
            if(mer_temp > prev)
            {
                // ha korábban nem látta, de már igen
                if(maxmer.at(szi) >= meredeksegek.at(szi))
                {
                    cnt += (maxmer.at(szi) <= maxmer.at(szi-1));
                }

                prev = mer_temp;

                // ameddig kisebbet találok
                while((++szi <= n) && maxmer.at(szi) <= prev)
                {
                    if(szi == nszi) break;

                    // ha a pont azelőtt csúcs volt, a látok számát csökkentem
                    if(maxmer.at(szi) > maxmer.at(szi-1))
                    {
                        cnt--;
                    }
                }
            }
            else
            {
                // ha a pont azelőtt csúcs volt, a látok számát csökkentem
                if(maxmer.at(szi) > maxmer.at(szi-1))
                {
                    cnt--;
                }
            }
            szi = nszi, mag = nmag, mer_temp = nmer_temp;
        }
        // ha számít a magasságváltozás
        if(mer_temp > prev)
        {
            // ha korábban nem látta, de már igen
            if(maxmer.at(szi) >= meredeksegek.at(szi))
            {
                cnt += (maxmer.at(szi) <= maxmer.at(szi-1));
            }

            prev = mer_temp;

            // ameddig kisebbet találok
            while((++szi <= n) && maxmer.at(szi) <= prev)
            {
                // ha a pont azelőtt csúcs volt, a látok számát csökkentem
                if(maxmer.at(szi) > maxmer.at(szi-1))
                    cnt--;
            }
        }
        else
        {
            if(maxmer.at(szi) > maxmer.at(szi-1))
                cnt--;
        }
        cout << cnt << " ";
    }
    


    
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/45
1Elfogadva0/03ms1828 KiB
2Futási hiba0/08ms2592 KiB
3Hibás válasz0/23ms2292 KiB
4Futási hiba0/24ms3048 KiB
5Hibás válasz0/24ms3060 KiB
6Futási hiba0/28ms3588 KiB
7Hibás válasz0/27ms3336 KiB
8Hibás válasz0/457ms4016 KiB
9Hibás válasz0/441ms4012 KiB
10Időlimit túllépés0/4400ms3248 KiB
11Futási hiba0/483ms4928 KiB
12Időlimit túllépés0/4349ms3316 KiB
13Időlimit túllépés0/5356ms3604 KiB
14Időlimit túllépés0/5360ms3628 KiB
15Időlimit túllépés0/5368ms3784 KiB