Submission #382760

# Submission time Handle Problem Language Result Execution time Memory
382760 2021-03-28T07:08:37 Z alishahali1382 Jousting tournament (IOI12_tournament) C++14
100 / 100
63 ms 3172 KB
#include <bits/stdc++.h>
#pragma GCC optimize ("O2,unroll-loops")
//#pragma GCC optimize("no-stack-protector,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<pii, int> piii;
typedef pair<ll, ll> pll;
#define debug(x) cerr<<#x<<'='<<(x)<<endl;
#define debugp(x) cerr<<#x<<"= {"<<(x.first)<<", "<<(x.second)<<"}"<<endl;
#define debug2(x, y) cerr<<"{"<<#x<<", "<<#y<<"} = {"<<(x)<<", "<<(y)<<"}"<<endl;
#define debugv(v) {cerr<<#v<<" : ";for (auto x:v) cerr<<x<<' ';cerr<<endl;}
#define all(x) x.begin(), x.end()
#define pb push_back
#define kill(x) return cout<<x<<'\n', 0;

const int inf=1000000010;
const ll INF=1000000000000001000LL;
const int mod=1000000007;
const int MAXN=100010, LOG=20;

int n, m, k, u, v, x, y, t, a, b, ans, out;
int fen[MAXN], ps[MAXN], dp[MAXN], par[MAXN];
vector<pii> vec;
vector<int> stk;

void add(int pos, int val){
	for (; pos<MAXN; pos+=pos&-pos) fen[pos]+=val;
}
int get(int pos){
	int res=0;
	for (; pos; pos-=pos&-pos) res+=fen[pos];
	return res;
}
int Find(int val){
	int pos=0;
	for (int i=16; ~i; i--) if ((pos+(1<<i))<=n && fen[pos+(1<<i)]<=val){
		pos+=(1<<i);
		val-=fen[pos];
	}
	return pos+1;
}
bool isgood(int l, int r){
	return ps[r-2]==ps[l-1];
}
bool cmp(pii i, pii j){
	if (i.second==j.second) return i.first>j.first;
	return i.second<j.second;
}
int GetBestPosition(int nn, int m, int T, int *A, int *L, int *R){
	n=nn;
	for (int i=1; i<=n; i++) add(i, 1);
	for (int i=1; i<n; i++) ps[i]=ps[i-1]+(A[i-1]>T);
	for (int i=0; i<m; i++){
		int l=Find(L[i]), r=Find(R[i]+1);
//		debug2(l, r)
		if (isgood(l, r)) vec.pb({l, r});
		for (int j=L[i]+1; j<=R[i]; j++) add(Find(L[i]+1), -1);
	}
	if (vec.empty()){
//		debug("shit")
		return 0;
	}
	sort(all(vec), cmp);
	for (int i=0; i<vec.size(); i++){
		while (stk.size() && vec[i].first<=vec[stk.back()].first){
			par[stk.back()]=i;
			stk.pop_back();
		}
		stk.pb(i);
		par[i]=-1;
	}
	for (int i=vec.size()-1; ~i; i--){
		if (par[i]!=-1) dp[i]=dp[par[i]];
		dp[i]++;
		if (dp[i]>ans) ans=dp[i], out=inf;
		if (dp[i]==ans && vec[i].first<out) out=vec[i].first;
	}
//	debug2(ans, out)
	return out-1;
}

Compilation message

tournament.cpp: In function 'int GetBestPosition(int, int, int, int*, int*, int*)':
tournament.cpp:68:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |  for (int i=0; i<vec.size(); i++){
      |                ~^~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Correct 1 ms 364 KB Output is correct
10 Correct 1 ms 364 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 364 KB Output is correct
2 Correct 4 ms 492 KB Output is correct
3 Correct 2 ms 364 KB Output is correct
4 Correct 3 ms 492 KB Output is correct
5 Correct 3 ms 492 KB Output is correct
6 Correct 5 ms 492 KB Output is correct
7 Correct 4 ms 492 KB Output is correct
8 Correct 4 ms 492 KB Output is correct
9 Correct 2 ms 364 KB Output is correct
10 Correct 4 ms 492 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 31 ms 1640 KB Output is correct
2 Correct 56 ms 2792 KB Output is correct
3 Correct 26 ms 1680 KB Output is correct
4 Correct 55 ms 3044 KB Output is correct
5 Correct 54 ms 3044 KB Output is correct
6 Correct 63 ms 3044 KB Output is correct
7 Correct 57 ms 3172 KB Output is correct
8 Correct 53 ms 2920 KB Output is correct
9 Correct 21 ms 1516 KB Output is correct
10 Correct 25 ms 1592 KB Output is correct