Submission #119077

#TimeUsernameProblemLanguageResultExecution timeMemory
119077oolimryTeams (IOI15_teams)C++14
13 / 100
4130 ms382048 KiB
#include "teams.h"
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> ii;
int n;
ii arr[1000005];
multiset<ii> tree[1000005];

ii query(int i){
    ii mv = ii(102345678,0);
    i += n;
    while(i > 0){
        if(!tree[i].empty()){
            ii x = *tree[i].begin();
            mv = min(x,mv);
        }
        i >>= 1;
    }
    return mv;
}

ii add(int l, int r, ii x){
    for(l += n, r += n;l < r;l >>= 1, r >>= 1){
        if(l&1){
            tree[l].insert(x);
            l++;
        }
        if(r&1){
            r--;
            tree[r].insert(x);
        }
    }
}
ii era(int l, int r, ii x){
    for(l += n, r += n;l < r;l >>= 1, r >>= 1){
        if(l&1){
            tree[l].erase(tree[l].find(x));
            l++;
        }
        if(r&1){
            r--;
            tree[r].erase(tree[r].find(x));
        }
    }
}
void init(int N, int A[], int B[]) {
    n = N;
    for(int i = 0;i < n;i++){
        arr[i] = {B[i],A[i]};
    }
    sort(arr,arr+n);
    for(int i = 0;i < n;i++){
        int r = arr[i].first;
        int l = arr[i].second;
        add(l,r+1,{r,l});
    }
}

int can(int M, int K[]) {
    int m = M;
    int s = 0;
    for(int i = 0;i < m;i++) s += K[i];
    if(s > n) return 0;

    int tasks[s];
    int cnt = 0;
    for(int i = 0;i < m;i++){
        for(int j = 0;j < K[i];j++){
            tasks[cnt] = K[i];
            cnt++;
        }
    }
    sort(tasks,tasks+s);
    vector<ii> removed;
    for(int i = 0;i < s;i++){
        int x = tasks[i];
        ii u = query(x);
        //cout << u.first << " " << u.second << "\n";
        if(u.first == 102345678){
            return 0;
        }
        int l = u.second;
        int r = u.first;
        era(l,r+1,ii(r,l));
        removed.push_back(ii(r,l));
    }

    for(int i = 0;i < removed.size();i++){
        int r = removed[i].first;
        int l = removed[i].second;
        add(l,r+1,{r,l});
    }
	return 1;
}

Compilation message (stderr)

teams.cpp: In function 'ii add(int, int, ii)':
teams.cpp:33:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
teams.cpp: In function 'ii era(int, int, ii)':
teams.cpp:45:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
teams.cpp: In function 'int can(int, int*)':
teams.cpp:88:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0;i < removed.size();i++){
                   ~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...