제출 #1286514

#제출 시각아이디문제언어결과실행 시간메모리
1286514tschav_Horses (IOI15_horses)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<ll> x, y;
int n;
int m;
ll prod = 1;
int idx = -1;
vector<int> st;
static const ll MOD = 1e9+7;

ll binpow(ll a, ll b, ll m) {
    a %= m;
    ll res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a % m;
        a = a * a % m;
        b >>= 1;
    }
    return res;
}

ll gety(int id){
	int lim = n;
	if(id < m-1) {
		lim = st[id+1];
	}
	ll mx = 0;
	for(int i = st[id]; i < lim; ++i){
		mx = max(mx, y[i]);
	}
}

ll solve() {
	ll mx = (idx == -1 ? 0 : y[st[idx]]);
	ll curr = 1;
	for(int i = idx+1; i < m; ++i){
		curr *= x[st[i]];
		int G = gety(i);
		if(curr * G > mx) {
			mx = curr * G;
		}
	}
	return (mx%MOD * prod%MOD) % MOD;
}

void ind() {
	idx = -1;
	ll P = 1ll;
	for(int i = m-1; i >= 0; --i) {
		if(P * x[st[i]] > 1e9) {
			idx=i;
			break;
		} else P *= x[st[i]];
	}
}

void getprod() {
	prod = 1ll;
	for(int i = 0; i <= idx; ++i){
		prod = (prod * x[st[i]]) % MOD;
	}
}

int init(int N, int X[], int Y[]) {
	n = N;
	x.resize(n,0ll);
	y.resize(n,0ll);
	for(int i = 0; i < n; ++i) {
		x[i] = X[i];
		y[i] = Y[i];
		if(x[i] >= 2){
			st.push_back(i);
		}
	}
	m = st.size();

	ind();
	getprod();
	return int(solve());
}

int updateX(int pos, int val) {
	ll old = x[pos];
	x[pos] = val;
	ind();
	if(pos <= idx) {
        prod = (prod * binpow(old, MOD-2,MOD)) % MOD;
        prod = (prod * val) % MOD;
	}
	
	if(val == 1 and old != 1) {
		st.erase(st.begin()+pos,1);
	}
	return int(solve());
}

int updateY(int pos, int val) {
	y[pos] = val;
	ind();
	return int(solve());
}

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

horses.cpp: In function 'll gety(int)':
horses.cpp:33:1: warning: no return statement in function returning non-void [-Wreturn-type]
   33 | }
      | ^
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:94:25: error: no matching function for call to 'std::vector<int>::erase(__gnu_cxx::__normal_iterator<int*, std::vector<int> >, int)'
   94 |                 st.erase(st.begin()+pos,1);
      |                 ~~~~~~~~^~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/13/vector:66,
                 from /usr/include/c++/13/functional:64,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:53,
                 from horses.cpp:1:
/usr/include/c++/13/bits/stl_vector.h:1534:7: note: candidate: 'constexpr std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::erase(const_iterator) [with _Tp = int; _Alloc = std::allocator<int>; iterator = std::vector<int>::iterator; const_iterator = std::vector<int>::const_iterator]'
 1534 |       erase(const_iterator __position)
      |       ^~~~~
/usr/include/c++/13/bits/stl_vector.h:1534:7: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/13/bits/stl_vector.h:1562:7: note: candidate: 'constexpr std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::erase(const_iterator, const_iterator) [with _Tp = int; _Alloc = std::allocator<int>; iterator = std::vector<int>::iterator; const_iterator = std::vector<int>::const_iterator]'
 1562 |       erase(const_iterator __first, const_iterator __last)
      |       ^~~~~
/usr/include/c++/13/bits/stl_vector.h:1562:52: note:   no known conversion for argument 2 from 'int' to 'std::vector<int>::const_iterator'
 1562 |       erase(const_iterator __first, const_iterator __last)
      |                                     ~~~~~~~~~~~~~~~^~~~~~