Submission #342315

# Submission time Handle Problem Language Result Execution time Memory
342315 2021-01-01T21:41:01 Z FlashGamezzz Werewolf (IOI18_werewolf) C++11
0 / 100
182 ms 21376 KB
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <unordered_set>
#include <vector>
#include <utility>
#include "werewolf.h"

using namespace std;

vector<int> adj[3000]; bool r1[3000], r2[3000];
int cr, cl, n, minvs[600000] = {}, maxvs[600000] = {};

void updh(int i, int s, int e, int l, int u, int d) {
	if (s > e || s > u || e < l) {
		return;
	}
	if (s >= l && e <= u) {
		minvs[i] = d; maxvs[i] = d; return;
	}
	updh(i*2+1, s, (s+e)/2, l, u, d); updh(i*2+2, (s+e)/2+1, e, l, u, d);
	minvs[i] = min(minvs[i*2+1], minvs[i*2+2]); maxvs[i] = max(maxvs[i*2+1], maxvs[i*2+2]);
}
void updv(int i, int d) {
	updh(0, 0, n-1, i, i, d);
}
int minh(int i, int s, int e, int l, int u) {
	if (s > e || s > u || e < l) {
		return 1000000000;
	}
	if (s >= l && e <= u) {
		return minvs[i];
	}
	return min(minh(2*i+1, s, (s+e)/2, l, u), minh(2*i+2, (s+e)/2+1, e, l, u));
}
int minv(int l, int u) {
	return minh(0, 0, n-1, l, u);
}
int maxh(int i, int s, int e, int l, int u) {
	if (s > e || s > u || e < l) {
		return -1;
	}
	if (s >= l && e <= u) {
		return maxvs[i];
	}
	return max(maxh(2*i+1, s, (s+e)/2, l, u), maxh(2*i+2, (s+e)/2+1, e, l, u));
}
int maxv(int l, int u) {
	return maxh(0, 0, n-1, l, u);
}

void dfs1(int i){
	if (i >= cl){
		r1[i] = true;
		for (int a : adj[i]){
			if (a >= cl && !r1[a]){
				dfs1(a);
			}
		}
	}
}
void dfs2(int i){
	if (i <= cr){
		r2[i] = true;
		for (int a : adj[i]){
			if (a <= cr && !r2[a]){
				dfs2(a);
			}
		}
	}
}
void dfs3(int i, int p, int ind){
	updv(ind, i);
	for (int a : adj[i]){
		if (a != p){
			dfs3(a, i, ind+1);
		}
	}
}

vector<int> check_validity(int N, vector<int> X, vector<int> Y, vector<int> S, vector<int> E, vector<int> L, vector<int> R) {
	n = N; int Q = S.size(); vector<int> A(Q);
	for (int i = 0; i < Q; ++i) {
		A[i] = 0;
	}
	for (int i = 0; i < X.size(); i++){
		adj[X[i]].push_back(Y[i]); adj[Y[i]].push_back(X[i]);
	}
	if (N == X.size() + 1){
		for (int i = 0; i < N; i++){
			if (adj[i].size() == 1){
				dfs3(i, -1, 0); break;
			}
		}
		for (int i = 0; i < Q; i++) {
			cr = R[i]; cl = L[i];
			int low = S[i], high = E[i], ub = 0;
			if (S[i] >= cl && E[i] <= R[i]){
				continue;
			}
			while (true){
				if (low == high){
					ub = low;
				}
				if (low+1 == high){
					ub = high;
					if (minv(S[i], high) < cl){
						ub = low;
					}
					break;
				}
				int mid = (low + high)/2;
				if (minv(S[i], mid) < cl){
					high = mid;
				} else {
					low = mid;
				}
			}
			low = S[i], high = E[i]; int lb = 0;
			while (true){
				if (low == high){
					lb = low;
				}
				if (low+1 == high){
					lb = low;
					if (maxv(low, E[i]) > cr){
						lb = high;
					}
					break;
				}
				int mid = (low + high)/2;
				if (maxv(mid, E[i]) > cr){
					low = mid;
				} else {
					high = mid;
				}
			}
			if (ub >= lb){
				A[i] = 1;
			}
		}
	} else {
		for (int i = 0; i < Q; i++) {
			for (int j = 0; j < N; j++){
				r1[j] = false; r2[j] = false;
			}
			cr = R[i]; cl = L[i];
			dfs1(S[i]); dfs2(E[i]);
			for (int j = L[i]; j <= R[i]; j++){
				if (r1[j] && r2[j]){
					  A[i] = 1; break;
				}
			}
		}
	}
	return A;
}

Compilation message

werewolf.cpp: In function 'std::vector<int> check_validity(int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
werewolf.cpp:88:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   88 |  for (int i = 0; i < X.size(); i++){
      |                  ~~^~~~~~~~~~
werewolf.cpp:91:8: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   91 |  if (N == X.size() + 1){
      |      ~~^~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Incorrect 1 ms 384 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Incorrect 1 ms 384 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 182 ms 21376 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Incorrect 1 ms 384 KB Output isn't correct
3 Halted 0 ms 0 KB -