제출 #160297

#제출 시각아이디문제언어결과실행 시간메모리
160297FiloSanza말 (IOI15_horses)C++14
컴파일 에러
0 ms0 KiB
#include "horses.h"
#include <bits/stdc++.h>

using namespace std;

inline int left(int i){return i*2+1;}
inline int right(int i){return (i+1)*2;}

const int MOD = 1e9+7;

int S;
vector<pair<int, bool>> segX;
vector<int> segM;
vector<int> Y;

pair<int, bool> mergeX(pair<int, bool> a, pair<int, bool> b){
	long long prod = 1LL * a.first * a.second;
	bool overflow = a.second || b.second || prod >= MOD;
	return {prod % MOD, overflow};
}

pair<int, bool> QueryX(int pos, int l, int r, int a, int b){
	if(l > b || r < a) return {1, false};
	if(l >= a && r <= b) return segX[pos];
	int mid = (l+r)/2;
	return mergeX(
		QueryX(left(pos), l, mid, a, b),
		QueryX(right(pos), mid+1, r, a, b)
	);
}

int mergeY(int a, int b){
	auto q = QueryX(0, a+1, b+1, 0, S/2);
	if(q.second) return b;
	return Y[a] > 1LL * Y[b] * q.first ? a : b;
}

int init(int N, int X[], int _Y[]) {
	S = (1 << (int)ceil(log2(N)+1)) - 1;
	segX.resize(S, 1);	
	segM.resize(S);
	Y.resize(N);

	for(int i=0; i<N; i++){
		segX[i+S/2] = {X[i], false};
		segM[i+S/2] = i;
		Y[i] = _Y[i];
	}

	for(int i=S/2-1; i>=0; i--){
		segX[i] = mergeX(segX[left(i)], segX[right(i)]);
		segM[i] = mergeY(segM[left(i)], segM[right(i)]);
	}

	for(auto i : segX) cout << i.first << " ";
	cout << "\n";

	return 1LL * QueryX(0, 0, S/2, 0, N-1).first * Y[segM[0]] % MOD;
}

int updateX(int pos, int val) {	
	return 0;
}

int updateY(int pos, int val) {
	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:40:18: error: no matching function for call to 'std::vector<std::pair<int, bool> >::resize(int&, int)'
  segX.resize(S, 1); 
                  ^
In file included from /usr/include/c++/7/vector:64:0,
                 from /usr/include/c++/7/queue:61,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:86,
                 from horses.cpp:2:
/usr/include/c++/7/bits/stl_vector.h:689:7: note: candidate: void std::vector<_Tp, _Alloc>::resize(std::vector<_Tp, _Alloc>::size_type) [with _Tp = std::pair<int, bool>; _Alloc = std::allocator<std::pair<int, bool> >; std::vector<_Tp, _Alloc>::size_type = long unsigned int]
       resize(size_type __new_size)
       ^~~~~~
/usr/include/c++/7/bits/stl_vector.h:689:7: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/7/bits/stl_vector.h:709:7: note: candidate: void std::vector<_Tp, _Alloc>::resize(std::vector<_Tp, _Alloc>::size_type, const value_type&) [with _Tp = std::pair<int, bool>; _Alloc = std::allocator<std::pair<int, bool> >; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::value_type = std::pair<int, bool>]
       resize(size_type __new_size, const value_type& __x)
       ^~~~~~
/usr/include/c++/7/bits/stl_vector.h:709:7: note:   no known conversion for argument 2 from 'int' to 'const value_type& {aka const std::pair<int, bool>&}'
horses.cpp:58:60: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
  return 1LL * QueryX(0, 0, S/2, 0, N-1).first * Y[segM[0]] % MOD;
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:61:17: warning: unused parameter 'pos' [-Wunused-parameter]
 int updateX(int pos, int val) { 
                 ^~~
horses.cpp:61:26: warning: unused parameter 'val' [-Wunused-parameter]
 int updateX(int pos, int val) { 
                          ^~~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:65:17: warning: unused parameter 'pos' [-Wunused-parameter]
 int updateY(int pos, int val) {
                 ^~~
horses.cpp:65:26: warning: unused parameter 'val' [-Wunused-parameter]
 int updateY(int pos, int val) {
                          ^~~