Submission #780603

#TimeUsernameProblemLanguageResultExecution timeMemory
780603dozerTeams (IOI15_teams)C++14
0 / 100
2724 ms524288 KiB
#include "teams.h"
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define st first
#define nd second
#define sp " "
#define pii pair<int, int>
#define LOGN 20

const int S = 400;
int tree[S + 5][100005];
int a[500005], b[500005], n;

void update(int bit[], int x, int val){
	while(x <= n){
		bit[x] += val;
		int lsb = x & -x;
		x += lsb;
	}
}

int query(int bit[], int x){
	int ans = 0;
	while(x > 0){
		ans += bit[x];
		int lsb = x & -x;
		x -= lsb;
	}
	return ans;
}

void init(int N, int A[], int B[]) {
	n = N;
	vector<int> v(N);
	iota(v.begin(), v.end(), 0);
	sort(v.begin(), v.end(), [&](int a, int b){
		if (B[a] == B[b]) return A[a] < A[b];
		return B[a] < B[b];
	});
	for (int i = 0; i < N; i++)
	{
		a[i] = A[v[i]], b[i] = B[v[i]];
	}

	for (int i = 0; i < N; i++){
		int g = i / S;
		update(tree[g], a[i], 1);
	}
}

int can(int M, int K[]) {
	sort(K, K + M);
	vector<int> vis(n, 0);
	vector<array<int, 3>> queries;
	int ans = 1;
	for (int i = 0; i < M; i++){
		int pos	= 0;
		for (int j = LOGN; j >= 0; j--){
			int tmp = pos + (1<<j);
			if (tmp < n && b[tmp] < K[i]) pos = tmp;
		}
		if (b[pos] < K[i]) pos++;
		int curr = K[i];
		while(pos < n && curr > 0){
			if (a[pos] > K[i]){
				update(tree[pos / S], a[pos], -1);
				queries.pb({pos / S, a[pos], 1});
				pos++;
				continue;
			}

			int x = query(tree[pos / S], K[i]);
			if (x > 0){
				curr--;
				update(tree[pos / S], 1, -1);
				queries.pb({pos / S, 1, 1});
			}
			pos++;
		}
		/*
		while(pos < n && curr > 0){
			int rem = query(tree[pos / S], K[i]);
			int diff = min(rem, curr);
			curr -= diff;
			update(tree[pos / S], 1, -diff);
			queries.pb({pos / S, 1, diff});
			pos += S;
		}*/
		if (curr > 0) ans = 0;
	}

	for (auto i : queries){
		update(tree[i[0]], i[1], i[2]);
	}
	return ans;
}

Compilation message (stderr)

teams.cpp: In lambda function:
teams.cpp:37:42: warning: declaration of 'b' shadows a global declaration [-Wshadow]
   37 |  sort(v.begin(), v.end(), [&](int a, int b){
      |                                      ~~~~^
teams.cpp:13:16: note: shadowed declaration is here
   13 | int a[500005], b[500005], n;
      |                ^
teams.cpp:37:35: warning: declaration of 'a' shadows a global declaration [-Wshadow]
   37 |  sort(v.begin(), v.end(), [&](int a, int b){
      |                               ~~~~^
teams.cpp:13:5: note: shadowed declaration is here
   13 | int a[500005], b[500005], n;
      |     ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...