Submission #267164

#TimeUsernameProblemLanguageResultExecution timeMemory
267164peuchTriangles (CEOI18_tri)C++17
20 / 100
1 ms384 KiB
#include<bits/stdc++.h>
#include "trilib.h"
using namespace std;

const int MAXN = 4e5;

int n;
int ini;
int v[MAXN];
int marc[MAXN];

void quickSort(int l, int r);

int main(){
	srand(time(0));
	n = get_n();
	for(int i = 1; i <= n; i++)
		v[i] = i;
	ini = rand() % n;
	ini++;
	swap(v[1], v[ini]);
	quickSort(2, n);
	int topo = -1;
	int ans = 0;
	vector<int> hull;
	for(int i = 1; i <= n; i++){
		while(topo > 1 && !is_clockwise(hull[topo - 1], hull[topo], v[i])){
			topo--;
			hull.pop_back();
		}
		hull.push_back(v[i]);
		topo++;
	}
	while(topo > 1 && !is_clockwise(hull[topo - 1], hull[topo], hull[0])){
		topo--;
		hull.pop_back();
	}
	ans = hull.size();
	if(topo > 1 && !is_clockwise(hull[topo], hull[0], hull[1])){
		ans--;
	}
	give_answer(ans);
}

void quickSort(int l, int r){
	if(l >= r) return;
	int point = rand() % (r - l + 1);
	point += l;
	point = v[point];
	vector<int> left;
	vector<int> right;
	for(int i = l; i <= r; i++){
		if(v[i] == point) continue;
		if(is_clockwise(ini, point, v[i])) right.push_back(v[i]);
		else left.push_back(v[i]);
	}
	int id = l;
	for(int i = 0; i < left.size(); i++)
		v[id++] = left[i];
	int mid = id;
	v[id++] = point;
	for(int i = 0; i < right.size(); i++)
		v[id++] = right[i];
	quickSort(l, mid - 1);
	quickSort(mid + 1, r);
}

Compilation message (stderr)

tri.cpp: In function 'void quickSort(int, int)':
tri.cpp:58:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |  for(int i = 0; i < left.size(); i++)
      |                 ~~^~~~~~~~~~~~~
tri.cpp:62:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |  for(int i = 0; i < right.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...
#Verdict Execution timeMemoryGrader output
Fetching results...