Submission #150108

# Submission time Handle Problem Language Result Execution time Memory
150108 2019-09-01T07:43:49 Z (παρα)γεμιστά(#3619, cfalas, ctziapo, Charis02) King of Chairs (FXCUP4_chairs) C++17
100 / 100
351 ms 48972 KB
#include "king.h"
#include<map>
#include<vector>
#include<algorithm>
#include<iostream>
#define ll long long
#define rep(i,a,b) for(int i = a;i < b;i++)
#define MAXN 300003

long long SendInfo(std::vector<int> W, std::vector<int> C) {
	int n = W.size();
    int cur = 0;

    sort(W.rbegin(),W.rend());
    sort(C.rbegin(),C.rend());

	rep(i,0,n)
	{
        if(W[i] <= C[cur])
        {
            cur++;
        }
	}

	return 0;
}
#include "vassal.h"
#include<map>
#include<vector>
#include<iostream>
#include<algorithm>
#include<set>
#define ll long long
#define pi pair < ll,ll >
#define mp(a,b) make_pair(a,b)
#define rep(i,a,b) for(int i = a;i < b;i++)
#define MAXN 1000003
#define INF 1e17

using namespace std;

long long maxi;
ll seg[4*MAXN];
vector < vector < ll > > chairs(MAXN);
ll sz = MAXN-2;

void update(ll low,ll high,ll pos,ll slow,ll val)
{
    if(low == high && low == slow)
    {
        seg[pos] += val;
        return;
    }
    if(low > slow || high < slow)
        return;

    ll mid = (low+high)/2;

    update(low,mid,pos*2+1,slow,val);
    update(mid+1,high,pos*2+2,slow,val);

    seg[pos] = seg[pos*2+1]+seg[pos*2+2];
    return;
}

ll query(ll low,ll high,ll pos,ll slow)
{
    if(seg[pos] == 0)
        return MAXN;

    ll mid= (low+high)/2;

    if(low >= slow)
    {
        if(low == high)
            return low;
        else if(seg[pos*2+1] > 0)
            return query(low,mid,pos*2+1,slow);
        else
            return query(mid+1,high,pos*2+2,slow);
    }
    if(high < slow)
        return MAXN;

    return min(query(low,mid,pos*2+1,slow),query(mid+1,high,pos*2+2,slow));
}

void Init(long long B, std::vector<int> C)
{
	int n = C.size();
	vector < int > tmp = C;
	sort(tmp.rbegin(),tmp.rend());

	maxi = INF;

	rep(i,0,n)
	{
        update(0,sz,0,C[i],1);
        chairs[C[i]].push_back(i);
	}

	return;
}

int Maid(int W){
    if(W>maxi)
        return -1;
    else
    {
        ll cur = query(0,sz,0,W);

        if(cur == MAXN)
            return -1;
        else
        {
            update(0,sz,0,cur,-1);
            ll ch = chairs[cur][0];
            chairs[cur].erase(chairs[cur].begin());

            return ch;
        }
    }
}
# Verdict Execution time Memory Grader output
1 Correct 23 ms 24596 KB Correct
2 Correct 24 ms 24728 KB Correct
3 Correct 24 ms 24856 KB Correct
4 Correct 25 ms 24976 KB Correct
5 Correct 25 ms 24980 KB Correct
# Verdict Execution time Memory Grader output
1 Correct 129 ms 45108 KB Correct
2 Correct 183 ms 48388 KB Correct
3 Correct 182 ms 48832 KB Correct
4 Correct 205 ms 48972 KB Correct
5 Correct 204 ms 48716 KB Correct
6 Correct 207 ms 48968 KB Correct
7 Correct 183 ms 48836 KB Correct
# Verdict Execution time Memory Grader output
1 Correct 184 ms 45100 KB Correct
2 Correct 290 ms 48388 KB Correct
3 Correct 240 ms 48844 KB Correct
4 Correct 351 ms 48960 KB Correct
5 Correct 321 ms 48964 KB Correct
6 Correct 329 ms 48972 KB Correct
7 Correct 230 ms 48836 KB Correct
8 Correct 146 ms 36928 KB Correct