Submission #69849

# Submission time Handle Problem Language Result Execution time Memory
69849 2018-08-21T16:02:00 Z FedericoS Jousting tournament (IOI12_tournament) C++14
100 / 100
147 ms 6272 KB
#include <iostream>
#include <vector>
#include <assert.h>
#include <set>
using namespace std;
typedef pair<int,int> pii;

int N;
int RT[4000005];
int inizio[400005],fine[400005];
pii ans;
int P;
set<int> Q;

int query(int k, int l, int r, int a){

	if(l==r)
		return l;

	int m=(l+r)/2;

	if(a<=RT[2*k])
		return query(2*k, l, m, a);
	else
		return query(2*k+1, m+1, r, a-RT[2*k]);

}

void update(int k, int l, int r, int a, int b){

	if(b<l or r<a) return;
	if(a<=l and r<=b){
		RT[k]=0;
		return;
	}

	int m=(l+r)/2;

	update(2*k, l, m, a, b);
	update(2*k+1, m+1, r, a, b);

	RT[k]=RT[2*k]+RT[2*k+1];

}

void costruisci(int k, int l, int r){

	if(l==r){
		RT[k]=1;
		return;
	}

	int m=(l+r)/2;

	costruisci(2*k,l,m);
	costruisci(2*k+1,m+1,r);

	RT[k]=RT[2*k]+RT[2*k+1];

}

int converti(int k){
	return query(1, 0, N, k+1);
}

void elimina(int x, int y){
	update(1, 0, N, x, y);
	return;
}

int GetBestPosition(int N_, int C, int R, int *K, int *S, int *E) {

	N=N_;

	costruisci(1, 0, N);

	for(int i=0;i<C;i++){
		S[i]=converti(S[i]);
		E[i]=converti(E[i]+1);
		elimina(S[i]+1,E[i]-1);
	}


	for(int i=0;i<N-1;i++)
		if(K[i]>R)
			Q.insert(i);

	for(int i=0;i<C;i++)
		if(*Q.lower_bound(S[i])<E[i]-1)
			S[i]=E[i]=-1;

	for(int i=0;i<C;i++)
		if(S[i]!=-1){
			inizio[S[i]]++;
			fine[E[i]]++;
		}

	for(int pos=0;pos<N;pos++){
		P+=inizio[pos];
		P-=fine[pos];
		ans=max(ans,{P,-pos});
	}

	return -ans.second;

}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 248 KB Output is correct
2 Correct 3 ms 356 KB Output is correct
3 Correct 3 ms 432 KB Output is correct
4 Correct 4 ms 436 KB Output is correct
5 Correct 3 ms 520 KB Output is correct
6 Correct 3 ms 520 KB Output is correct
7 Correct 3 ms 520 KB Output is correct
8 Correct 3 ms 520 KB Output is correct
9 Correct 2 ms 520 KB Output is correct
10 Correct 3 ms 636 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 636 KB Output is correct
2 Correct 7 ms 800 KB Output is correct
3 Correct 4 ms 800 KB Output is correct
4 Correct 7 ms 828 KB Output is correct
5 Correct 7 ms 960 KB Output is correct
6 Correct 5 ms 960 KB Output is correct
7 Correct 8 ms 960 KB Output is correct
8 Correct 9 ms 1052 KB Output is correct
9 Correct 6 ms 1052 KB Output is correct
10 Correct 11 ms 1052 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 47 ms 2564 KB Output is correct
2 Correct 118 ms 6272 KB Output is correct
3 Correct 28 ms 6272 KB Output is correct
4 Correct 128 ms 6272 KB Output is correct
5 Correct 129 ms 6272 KB Output is correct
6 Correct 105 ms 6272 KB Output is correct
7 Correct 117 ms 6272 KB Output is correct
8 Correct 147 ms 6272 KB Output is correct
9 Correct 59 ms 6272 KB Output is correct
10 Correct 42 ms 6272 KB Output is correct