46022023-03-30 11:11:04AGergoÁdám és Éva együttcpp17Accepted 50/5041ms5580 KiB
#include <bits/stdc++.h>

using namespace std;

int main()
{
    int utolso,adamszam,evaszam;
    cin >> utolso >> adamszam;

    vector<int> ansStart;
    vector<int> ansEnd;

    int ans = 0;

    vector<int> aStart(adamszam+1,-1);
    vector<int> aEnd(adamszam+1,-1);

    for(int i = 0; i < adamszam; i++)
    {
        cin >> aStart[i] >> aEnd[i];
    }

    cin >> evaszam;

    vector<int> eStart(evaszam+1,-1);
    vector<int> eEnd(evaszam+1,-1);

    for(int i = 0; i < evaszam; i++)
    {
        cin >> eStart[i] >> eEnd[i];
    }

    int x = 0,y = 0; //x -eva index; y - adam index

    while(y < adamszam && x < evaszam)
    {


        //cout << "adam: " << y << " eva: " << x << "\n";
        if(eStart[x] > aStart[y] && eStart[x] < aEnd[y])
        {
            ans++;
            if(eEnd[x] > aEnd[y])
            {
                ansStart.push_back(eStart[x]);
                ansEnd.push_back(aEnd[y]);
                y++;
            }
            else
            {
                ansStart.push_back(eStart[x]);
                ansEnd.push_back(eEnd[x]);
                x++;
            }
        }
        else if(aStart[y] > eStart[x] && aStart[y] < eEnd[x])
        {
            ans++;
            if(aEnd[y] > eEnd[x])
            {
                ansStart.push_back(aStart[y]);
                ansEnd.push_back(eEnd[x]);
                x++;
            }
            else
            {
                ansStart.push_back(aStart[y]);
                ansEnd.push_back(aEnd[y]);
                y++;
            }
        }
        else if(aStart[y] == eStart[x])
        {
            ans++;
            if(aEnd[y] > eEnd[x])
            {
                ansStart.push_back(aStart[y]);
                ansEnd.push_back(eEnd[x]);
                x++;
            }
            else
            {
                ansStart.push_back(aStart[y]);
                ansEnd.push_back(aEnd[y]);
                y++;
            }
        }

        if(aStart[y] == eStart[x])
        {
            if(aEnd[y] < eEnd[x])
            {
                y++;
            }
            else
            {
                x++;
            }
        }

 while(aEnd[y] <= eStart[x])
        {
            y++;
        }

        while(eEnd[x] <= aStart[y])
        {
            x++;
        }


    }

    cout << ans << "\n";
    for(int i = 0; i < ans; i++)
    {
        cout << ansStart[i] << " " << ansEnd[i] << "\n";
    }
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/03ms1808 KiB
2Accepted0/03ms2060 KiB
3Accepted2/23ms2272 KiB
4Accepted2/23ms2428 KiB
5Accepted2/23ms2636 KiB
6Accepted2/23ms2848 KiB
7Accepted2/22ms3060 KiB
8Accepted2/22ms3316 KiB
9Accepted2/23ms3520 KiB
10Accepted2/23ms3700 KiB
11Accepted2/23ms3784 KiB
12Accepted2/23ms3812 KiB
13Accepted2/23ms4036 KiB
14Accepted2/23ms4244 KiB
15Accepted2/23ms4280 KiB
16Accepted2/239ms5288 KiB
17Accepted3/339ms5416 KiB
18Accepted3/335ms5508 KiB
19Accepted4/437ms5304 KiB
20Accepted4/441ms5580 KiB
21Accepted4/439ms5348 KiB
22Accepted4/439ms5348 KiB