Submission #260999

#TimeUsernameProblemLanguageResultExecution timeMemory
260999SamAndRobots (IOI13_robots)C++17
100 / 100
433 ms27184 KiB
#include "robots.h"
#include <set>
#include <vector>
#include <algorithm>
using namespace std;
#define m_p make_pair
#define fi first
#define se second
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(),(x).end()
typedef long long ll;
const int N = 1000006;

struct ban
{
    int x, y;
};
bool soy(const ban& a, const ban& b)
{
    return a.y < b.y;
}
bool sox(const ban& a, const ban& b)
{
    return a.x < b.x;
}

int n;
ban a[N];

int xn, yn;
int x[N], y[N];

int qq[N];

int u[N];
int p[N];

int fi(int x)
{
    if (x == p[x])
        return x;
    return p[x] = fi(p[x]);
}

bool stg(int q)
{
    for (int i = 0; i < xn; ++i)
    {
        qq[i] = q;
    }

    for (int i = 0; i <= xn; ++i)
        p[i] = i;

    vector<int> v;
    for (int i = n - 1; i >= 0; --i)
    {
        int j = u[i];
        bool z = false;
        while (1)
        {
            if (j == xn)
                break;
            if (qq[j])
            {
                --qq[j];
                z = true;
                break;
            }
            if (j == p[j])
                p[j] = j + 1;
            j = fi(j);
        }
        if (!z)
            v.push_back(a[i].y);
    }

    for (int i = 0; i < yn; ++i)
    {
        qq[i] = q;
    }
    int j = yn - 1;
    for (int i = 0; i < sz(v); ++i)
    {
        while (j != -1 && qq[j] == 0)
            --j;
        if (j == -1)
            return false;
        if (y[j] <= v[i])
            return false;
        --qq[j];
    }
    return true;
}

int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[])
{
    xn = A;
    yn = B;
    for (int i = 0; i < xn; ++i)
        x[i] = X[i];
    for (int i = 0; i < yn; ++i)
        y[i] = Y[i];

    n = T;
    for (int i = 0; i < n; ++i)
    {
        a[i].x = W[i];
        a[i].y = S[i];
    }

    sort(x, x + xn);
    sort(y, y + yn);

    for (int i = 0; i < n; ++i)
    {
        if (xn && a[i].x < x[xn - 1])
            continue;
        if (yn && a[i].y < y[yn - 1])
            continue;
        return -1;
    }

    sort(a, a + n, soy);
    for (int i = 0; i < n; ++i)
    {
        u[i] = upper_bound(x, x + xn, a[i].x) - x;
    }

    int l = 1, r = n;
    int ans;
    while (l <= r)
    {
        int m = (l + r) / 2;
        if (stg(m))
        {
            ans = m;
            r = m - 1;
        }
        else
            l = m + 1;
    }
    return ans;
}

Compilation message (stderr)

robots.cpp: In function 'int putaway(int, int, int, int*, int*, int*, int*)':
robots.cpp:131:9: warning: 'ans' may be used uninitialized in this function [-Wmaybe-uninitialized]
     int ans;
         ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...