32452023-02-23 11:54:37rennSzurikáta (45)cpp17Hibás válasz 0/45319ms4272 KiB
#include <bits/stdc++.h>
using namespace std;

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

inline int s_csucs(vector<int> &csucsok, int tg, int left, int right)
{
    for (int i = 0; i < right; i++)
    {
        if(csucsok[i] == tg)
            return i+1;
        
        if(csucsok[i] > tg)
            return i;
    }
    return right-1;
}

inline int bins_csucs(vector<int> &csucsok, int tg, int left, int right)
{
    int mid;
    while(left < right)
    {
        mid = left+(right-left)/2;
        if(csucsok[mid] == tg)
            return mid+1;

        if(csucsok[mid] < tg)
        {
            left = mid+1;
        }
        else
        {
            right = mid-1;
        }
    }

    return left+1;
}

int main()
{
    GOTTAGOFAST

    int n, fa, q;
    cin >> n >> fa >> q;
    vector<int> uregek(n+1);
    vector<int> uregmag(n+1);
    vector<bool> csucs(n+1, false);
    vector<int> csucsok;

    vector<double> maxmer(n+1);

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

    int latjak = 0, cnt;
    double prev = -100000000, mer_temp;

    for (int i = 1, j; i <= n; i++)
    {
        cin >> j;
        uregmag.at(i) = j; 
        mer_temp = (double)(j-fa)/(double)uregek.at(i);
        if(mer_temp > prev)
        {
            csucs.at(i) = true;
            csucsok.push_back(i);
            
            prev = mer_temp;
            latjak++;
        }
        maxmer.at(i) = prev;
    }
    csucsok.push_back(100000000);
    int i, k;
    int szi, mag;

    queue<int> szik;
    queue<int> magk;

    //cout << "debug1\n";

    while(q--)
    {
        //cout << "debug2\n";
        cin >> k;
        while(k--)
        {
            //cout << "debug3\n";
            cin >> szi >> mag;
            szik.push(szi);
            magk.push(mag);
        }

        cnt = latjak;

        szi = szik.front();
        mag = magk.front();

        mer_temp = (double)(uregmag[szi]+mag-fa)/(double)(uregek[szi]);

        szik.pop();
        magk.pop();

        //cout << "debug4\n";

        prev = maxmer[szi];
        i = bins_csucs(csucsok, szi, 0, csucsok.size());

        bool br;

        //cout << "debug5\n";

        while(true)
        {
            br = true;
            //cout << "debug6\n";
            if(mer_temp > prev) // ha magasabb, mint az előző
            {
                //cout << "debug7\n";
                cnt += !csucs[szi]; // 1 ha korábban nem látta, 0 ha korábban is látta
                prev = mer_temp;
            }
            else // ha nem magasabb, mint az előző
            {
                //cout << "debug8\n";
                cnt -= csucs[szi]; // 1 ha korábban csúcs volt, 0 ha korábban se látta
            }

            //cout << "debug9\n";

            for(i; i < csucsok.size(); i++)
            {
                //cout << "csucs: " << csucsok[i] << "\n";
                if(!szik.empty())
                {
                    if(csucsok[i] >= szik.front()) // ha elértem a kövi pontot
                    {
                        //cout << "elerte\n";
                        br = false;
                        szi = szik.front();
                        mag = magk.front();
                        mer_temp = (double)(uregmag[szi]+mag-fa)/(double)(uregek[szi]);
                        szik.pop();
                        magk.pop();
                        i += (csucsok[i] == szi);
                        break;
                    }
                }

                //cout << "debug10\n";
                if(csucsok[i] > n) continue;
                if(maxmer[csucsok[i]] <= prev)
                    cnt--;
                else
                    prev = maxmer[csucsok[i]];
                //cout << "debug11\n";
            }
            if(br) break;
        }
        cout << cnt << " ";
    }

    cout << "\n";
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/45
1Hibás válasz0/03ms1828 KiB
2Hibás válasz0/08ms2172 KiB
3Hibás válasz0/23ms2112 KiB
4Hibás válasz0/23ms2236 KiB
5Hibás válasz0/24ms2604 KiB
6Hibás válasz0/27ms2556 KiB
7Hibás válasz0/27ms2556 KiB
8Hibás válasz0/419ms3212 KiB
9Hibás válasz0/416ms3212 KiB
10Hibás válasz0/452ms3468 KiB
11Hibás válasz0/493ms3540 KiB
12Hibás válasz0/4150ms3692 KiB
13Hibás válasz0/5207ms3904 KiB
14Hibás válasz0/5263ms3976 KiB
15Időlimit túllépés0/5319ms4272 KiB