제출 #1257459

#제출 시각아이디문제언어결과실행 시간메모리
1257459nguynTwo Currencies (JOI23_currencies)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define ll long long
#define F first
#define S second
#define pb push_back
#define pii pair<int, int>

const int N = 1e5 + 5;

struct BIT {
	int n; 	
	vector<ll> bit; 
	
	BIT() {}
	
	BIT(int _n) : n(_n) {
		bit.assign(n + 3, 0); 
	}
	
	void update(int id, ll val) {
		for (int i = id; i <= n; i += (i & -i)) bit[i] += val; 
	}
	
	ll get(int id) {
		ll ret = 0; 
		for (int i = id; i > 0; i -= (i & -i)) ret += bit[i]; 
		return ret; 
	} 
	
	ll get(int u, int v) {
		return get(v) - get(u - 1); 
	}
} sum, cnt;

struct Query {
	int u, v, x; ll y; 
} que[N];

int n, m, q; 
vector<int> g[N];
int tin[N], tout[N]; 
pii edges[N];
int res[N];
int l[N], r[N];  
int timedfs = 0;
vector<int> ev[N]; 
vector<pair<ll, int>> vec;  
int anc[N], up[N][17], h[N]; 



void pre_dfs(int u, int p) {
	tin[u] = ++timedfs;
	for (int v : g[u]) {
		if (v == p) continue;
		up[v][0] = u; 
		h[v] = h[u] + 1;
		for (int i = 1; i < 17; i++) {
			up[v][i] = up[up[v][i - 1]][i - 1]; 
		}
		pre_dfs(v, u); 
	}
	tout[u] = ++timedfs;
}

int lca(int u, int v) {
	if (h[u] != h[v]) {
		if (h[u] < h[v]) swap(u, v); 
		int k = h[u] - h[v]; 
		for (int i = 0; (1 << i) <= k; i++) {
			if (k >> i & 1) u = up[u][i];
		}
	}
	if (u == v) return u; 
	for (int i = 16; i >= 0; i--) {
		if (up[u][i] != up[v][i]) {
			u = up[u][i];
			v = up[v][i];
		}
	}
	return up[u][0];
}


signed main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> m >> q;
	for (int i = 1; i < n; i++) {
		int u, v; 
		cin >> u >> v; 
		g[u].pb(v);
		g[v].pb(u);
		edges[i] = {u, v}; 
	}
	pre_dfs(1, 0); 
	for (int i = 1; i <= m; i++) {
		int p, c;
		int u, v;
		cin >> p >> c;
		tie(u, v) = edges[p];  
		if (v == up[u][0]) swap(u, v);
		vec.pb({c, v}); 	 
	}
	for (int i = 1; i <= q; i++) {
		int u, v, x, y;
		cin >> u >> v >> x >> y; 
		que[i] = {u, v, x, y};
		anc[i] = lca(u, v); 
		l[i] = 0; 
		r[i] = vec.size() - 1; 
	} 
	sort(vec.begin(), vec.end());
	while(1) {
		bool ok = 0;
		for (int i = 1; i <= q; i++) {
			if (l[i] <= r[i]) {
				int mid = (l[i] + r[i]) / 2; 
				ok = 1;
				ev[mid].pb(i);  
			}
		}
		if (!ok) break;
		sum = BIT(2 * n);
		cnt = BIT(2 * n); 
		for (int i = 0; i < vec.size(); i++) {
			cnt.update(tin[vec[i].S], 1); 
			cnt.update(tout[vec[i].S], - 1); 
			sum.update(tin[vec[i].S], vec[i].F); 
			sum.update(tout[vec[i].S], - vec[i].F); 
			
			for (int id : ev[i]) {
				ll tmp = sum.get(tin[anc[id]] + 1, tin[que[id].u]) + sum.get(tin[anc[id]] + 1, tin[que[id].v]);
				if (tmp <= que[id].y) {
					res[id] = cnt.get(tin[anc[id]] + 1, tin[que[id].u]) + cnt.get(tin[anc[id]] + 1, tin[que[id].v]);
					l[id] = i + 1;  
				}
				else {
					r[id] = i - 1; 
				}
			}
			ev[i].clear(); 
		}
	}
	cnt = BIT(2 * n); 
	for (int i = 0; i < vec.size(); i++) {
		cnt.update(tin[vec[i].S], 1); 
		cnt.update(tout[vec[i].S], -1); 
	}
	for (int i = 1; i <= q; i++) {
		int c = cnt.get(tin[anc[i]] + 1, tin[que[i].u]) + cnt.get(tin[anc[i]] + 1, tin[que[i].v]);
//		cout << c << ' ' << res[i] << ' ' << que[i].x << ' '; 
		c -= res[i]; 
		cout << max(-1, que[i].x - c) << '\n'; 
	}
} 

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

currencies.cpp: In function 'int main()':
currencies.cpp:157:28: error: no matching function for call to 'max(int, long long int)'
  157 |                 cout << max(-1, que[i].x - c) << '\n';
      |                         ~~~^~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/bits/specfun.h:45,
                 from /usr/include/c++/11/cmath:1935,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:41,
                 from currencies.cpp:1:
/usr/include/c++/11/bits/stl_algobase.h:254:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)'
  254 |     max(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/11/bits/stl_algobase.h:254:5: note:   template argument deduction/substitution failed:
currencies.cpp:157:28: note:   deduced conflicting types for parameter 'const _Tp' ('int' and 'long long int')
  157 |                 cout << max(-1, que[i].x - c) << '\n';
      |                         ~~~^~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/bits/specfun.h:45,
                 from /usr/include/c++/11/cmath:1935,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:41,
                 from currencies.cpp:1:
/usr/include/c++/11/bits/stl_algobase.h:300:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)'
  300 |     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/11/bits/stl_algobase.h:300:5: note:   template argument deduction/substitution failed:
currencies.cpp:157:28: note:   deduced conflicting types for parameter 'const _Tp' ('int' and 'long long int')
  157 |                 cout << max(-1, que[i].x - c) << '\n';
      |                         ~~~^~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/string:52,
                 from /usr/include/c++/11/bits/locale_classes.h:40,
                 from /usr/include/c++/11/bits/ios_base.h:41,
                 from /usr/include/c++/11/ios:42,
                 from /usr/include/c++/11/istream:38,
                 from /usr/include/c++/11/sstream:38,
                 from /usr/include/c++/11/complex:45,
                 from /usr/include/c++/11/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:54,
                 from currencies.cpp:1:
/usr/include/c++/11/bits/stl_algo.h:3461:5: note: candidate: 'template<class _Tp> constexpr _Tp std::max(std::initializer_list<_Tp>)'
 3461 |     max(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/11/bits/stl_algo.h:3461:5: note:   template argument deduction/substitution failed:
currencies.cpp:157:28: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
  157 |                 cout << max(-1, que[i].x - c) << '\n';
      |                         ~~~^~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/string:52,
                 from /usr/include/c++/11/bits/locale_classes.h:40,
                 from /usr/include/c++/11/bits/ios_base.h:41,
                 from /usr/include/c++/11/ios:42,
                 from /usr/include/c++/11/istream:38,
                 from /usr/include/c++/11/sstream:38,
                 from /usr/include/c++/11/complex:45,
                 from /usr/include/c++/11/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:54,
                 from currencies.cpp:1:
/usr/include/c++/11/bits/stl_algo.h:3467:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::max(std::initializer_list<_Tp>, _Compare)'
 3467 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/11/bits/stl_algo.h:3467:5: note:   template argument deduction/substitution failed:
currencies.cpp:157:28: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
  157 |                 cout << max(-1, que[i].x - c) << '\n';
      |                         ~~~^~~~~~~~~~~~~~~~~~