답안 #403851

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
403851 2021-05-13T14:16:04 Z penguinhacker Plahte (COCI17_plahte) C++14
컴파일 오류
0 ms 0 KB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ar array

#define debug(x) cerr << "[" << #x << "] = [" << x << "]\n"

template<class T> ostream& operator<< (ostream& out, vector<T> v) {
	out << '[';
	for (int i = 0; i < v.size(); ++i) {
		if (i > 0) {
			out << ", ";
		}
		out << v[i];
	}
	return out << ']';
}

template<class T> ostream& operator<< (ostream& out, set<T> v) {
	return out << vector<T>(v.begin(), v.end());
}

template<class A, unsigned int sz> ostream& operator<< (ostream& out, ar<A, sz> a) {
	out << '[';
	for (int i = 0; i < sz; ++i) {
		if (i > 0) out << ", ";
		out << a[i];
	}
	return out << ']';
}

template<class A, class B> ostream& operator<< (ostream& out, pair<A, B> p) {
	return out << '[' << p.first << ", " << p.second << ']';
}

template<class A, class B> ostream& operator<< (ostream& out, map<A, B> mp) {
	return out << vector<pair<A, B>>(mp.begin(), mp.end());
}

// just build a tree on the rectanges, and then a simple dfs to push the colors down
// the question is how do we build the tree, and how do we find the topmost rectangle that each shot hits
// idea: sweepline
// specifics: put all active rectangles in a set and sweep

const int mxN=80000;
int n, m, y1[mxN], y2[mxN], p[mxN], ans[mxN];
ar<int, 2> ball[mxN];
vector<ar<int, 3>> e;
set<ar<int, 3>> s, s2;
vector<int> adj[mxN];
set<int> dp[mxN];

int check(int y) {
	auto it=s.upper_bound({y});
	if (it==s.begin())
		return -1;
	ar<int, 3> a=*(--it);
	if (y<=a[1])
		return a[2];
	it=s2.lower_bound({y});
	if (it==s.end())
		return -1;
	a=*it;
	return y>=a[1]?a[2]:-1;
}

void dfs(int u) {
	for (int v : adj[u]) {
		dfs(v);
		if (dp[v].size()>dp[u].size())
			swap(dp[u], dp[v]);
		for (const int& i : dp[v])
			dp[u].insert(i);
		set<int>().swap(dp[v]);
	}
	ans[u]=dp[u].size();
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> m;
	for (int i=0; i<n; ++i) {
		int a, b;
		cin >> a >> y1[i] >> b >> y2[i];
		e.push_back({a, 1, i});
		e.push_back({b, 3, i});
	}
	for (int i=0; i<m; ++i) {
		int x;
		cin >> x >> ball[i][0] >> ball[i][1];
		e.push_back({x, 2, i});
	}
	sort(e.begin(), e.end());
	memset(p, -1, sizeof(p));
	for (ar<int, 3> a : e) {
		int i=a[2];
		if (a[1]==1) {
			int x=check(y1[i]);
			if (x^-1) {
				p[i]=x;
				adj[p[i]].push_back(i);
			}
			s.insert({y1[i], y2[i], i});
			s2.insert({y2[i], y1[i], i});
		} else if (a[1]==2) {
			//debug(ball[i]);
			//debug(s);
			int x=check(ball[i][0]);
			//debug(x);
			if (x^-1)
				dp[x].insert(ball[i][1]);
		} else {
			s.erase({y1[i], y2[i], i});
			s2.erase({y2[i], y1[i], i});
		}
	}
	for (int i=0; i<n; ++i)
		if (p[i]==-1)
			dfs(i);
	for (int i=0; i<n; ++i)
		cout << ans[i] << "\n";
	return 0;
}

Compilation message

plahte.cpp:47:17: error: 'int y1 [80000]' redeclared as different kind of entity
   47 | int n, m, y1[mxN], y2[mxN], p[mxN], ans[mxN];
      |                 ^
In file included from /usr/include/features.h:461,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/os_defines.h:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/c++config.h:518,
                 from /usr/include/c++/10/cassert:43,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from plahte.cpp:1:
/usr/include/x86_64-linux-gnu/bits/mathcalls.h:221:1: note: previous declaration 'double y1(double)'
  221 | __MATHCALL (y1,, (_Mdouble_));
      | ^~~~~~~~~~
plahte.cpp: In function 'int main()':
plahte.cpp:86:19: warning: pointer to a function used in arithmetic [-Wpointer-arith]
   86 |   cin >> a >> y1[i] >> b >> y2[i];
      |                   ^
plahte.cpp:86:12: error: no match for 'operator>>' (operand types are 'std::basic_istream<char>::__istream_type' {aka 'std::basic_istream<char>'} and 'double(double) throw ()' {aka 'double(double)'})
   86 |   cin >> a >> y1[i] >> b >> y2[i];
      |   ~~~~~~~~ ^~ ~~~~~
      |       |           |
      |       |           double(double) throw () {aka double(double)}
      |       std::basic_istream<char>::__istream_type {aka std::basic_istream<char>}
In file included from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from plahte.cpp:1:
/usr/include/c++/10/istream:120:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__istream_type& (*)(std::basic_istream<_CharT, _Traits>::__istream_type&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' (near match)
  120 |       operator>>(__istream_type& (*__pf)(__istream_type&))
      |       ^~~~~~~~
/usr/include/c++/10/istream:120:7: note:   conversion of argument 1 would be ill-formed:
plahte.cpp:86:19: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'std::basic_istream<char>::__istream_type& (*)(std::basic_istream<char>::__istream_type&)' {aka 'std::basic_istream<char>& (*)(std::basic_istream<char>&)'} [-fpermissive]
   86 |   cin >> a >> y1[i] >> b >> y2[i];
      |               ~~~~^
      |                   |
      |                   double (*)(double) throw () {aka double (*)(double)}
In file included from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from plahte.cpp:1:
/usr/include/c++/10/istream:124:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__ios_type& (*)(std::basic_istream<_CharT, _Traits>::__ios_type&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>; std::basic_istream<_CharT, _Traits>::__ios_type = std::basic_ios<char>]' (near match)
  124 |       operator>>(__ios_type& (*__pf)(__ios_type&))
      |       ^~~~~~~~
/usr/include/c++/10/istream:124:7: note:   conversion of argument 1 would be ill-formed:
plahte.cpp:86:19: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'std::basic_istream<char>::__ios_type& (*)(std::basic_istream<char>::__ios_type&)' {aka 'std::basic_ios<char>& (*)(std::basic_ios<char>&)'} [-fpermissive]
   86 |   cin >> a >> y1[i] >> b >> y2[i];
      |               ~~~~^
      |                   |
      |                   double (*)(double) throw () {aka double (*)(double)}
In file included from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from plahte.cpp:1:
/usr/include/c++/10/istream:131:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::ios_base& (*)(std::ios_base&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' (near match)
  131 |       operator>>(ios_base& (*__pf)(ios_base&))
      |       ^~~~~~~~
/usr/include/c++/10/istream:131:7: note:   conversion of argument 1 would be ill-formed:
plahte.cpp:86:19: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'std::ios_base& (*)(std::ios_base&)' [-fpermissive]
   86 |   cin >> a >> y1[i] >> b >> y2[i];
      |               ~~~~^
      |                   |
      |                   double (*)(double) throw () {aka double (*)(double)}
In file included from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from plahte.cpp:1:
/usr/include/c++/10/istream:168:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(bool&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' (near match)
  168 |       operator>>(bool& __n)
      |       ^~~~~~~~
/usr/include/c++/10/istream:168:7: note:   conversion of argument 1 would be ill-formed:
plahte.cpp:86:19: error: cannot bind non-const lvalue reference of type 'bool&' to an rvalue of type 'bool'
   86 |   cin >> a >> y1[i] >> b >> y2[i];
      |               ~~~~^
In file included from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from plahte.cpp:1:
/usr/include/c++/10/istream:172:7: note: candidate: 'std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(short int&) [with _CharT = char; _Traits = std::char_traits<char>]' (near match)
  172 |       operator>>(short& __n);
      |       ^~~~~~~~
/usr/include/c++/10/istream:172:7: note:   conversion of argument 1 would be ill-formed:
plahte.cpp:86:19: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'short int' [-fpermissive]
   86 |   cin >> a >> y1[i] >> b >> y2[i];
      |               ~~~~^
      |                   |
      |                   double (*)(double) throw () {aka double (*)(double)}
plahte.cpp:86:19: error: cannot bind rvalue '(short int)(y1 + ((sizetype)i))' to 'short int&'
In file included from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from plahte.cpp:1:
/usr/include/c++/10/istream:175:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(short unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' (near match)
  175 |       operator>>(unsigned short& __n)
      |       ^~~~~~~~
/usr/include/c++/10/istream:175:7: note:   conversion of argument 1 would be ill-formed:
plahte.cpp:86:19: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'short unsigned int' [-fpermissive]
   86 |   cin >> a >> y1[i] >> b >> y2[i];
      |               ~~~~^
      |                   |
      |                   double (*)(double) throw () {aka double (*)(double)}
plahte.cpp:86:19: error: cannot bind rvalue '(short unsigned int)(y1 + ((sizetype)i))' to 'short unsigned int&'
In file included from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from plahte.cpp:1:
/usr/include/c++/10/istream:179:7: note: candidate: 'std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(int&) [with _CharT = char; _Traits = std::char_traits<char>]' (near match)
  179 |       operator>>(int& __n);
      |       ^~~~~~~~
/usr/include/c++/10/istream:179:7: note:   conversion of argument 1 would be ill-formed:
plahte.cpp:86:19: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'int' [-fpermissive]
   86 |   cin >> a >> y1[i] >> b >> y2[i];
      |               ~~~~^
      |                   |
      |                   double (*)(double) throw () {aka double (*)(double)}
plahte.cpp:86:19: error: cannot bind rvalue '(int)(y1 + ((sizetype)i))' to 'int&'
In file included from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from plahte.cpp:1:
/usr/include/c++/10/istream:182:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' (near match)
  182 |       operator>>(unsigned int& __n)
      |       ^~~~~~~~
/usr/include/c++/10/istream:182:7: note:   conversion of argument 1 would be ill-formed:
plahte.cpp:86:19: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'unsigned int' [-fpermissive]
   86 |   cin >> a >> y1[i] >> b >> y2[i];
      |               ~~~~^
      |                   |
      |                   double (*)(double) throw () {aka double (*)(double)}
plahte.cpp:86:19: error: cannot bind rvalue '(unsigned int)(y1 + ((sizetype)i))' to 'unsigned int&'
In file included from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from plahte.cpp:1:
/usr/include/c++/10/istream:186:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' (near match)
  186 |       operator>>(long& __n)
      |       ^~~~~~~~
/usr/include/c++/10/istream:186:7: note:   conversion of argument 1 would be ill-formed:
plahte.cpp:86:19: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'long int' [-fpermissive]
   86 |   cin >> a >> y1[i] >> b >> y2[i];
      |               ~~~~^
      |                   |
      |                   double (*)(double) throw () {aka double (*)(double)}
plahte.cpp:86:19: error: cannot bind rvalue '(long int)(y1 + ((sizetype)i))' to 'long int&'
In file included from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from plahte.cpp:1:
/usr/include/c++/10/istream:190:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' (near match)
  190 |       operator>>(unsigned long& __n)
      |       ^~~~~~~~
/usr/include/c++/10/istream:190:7: note:   conversion of argument 1 would be ill-formed:
plahte.cpp:86:19: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'long unsigned int' [-fpermissive]
   86 |   cin >> a >> y1[i] >> b >> y2[i];
      |               ~~~~^
      |                   |
      |                   double (*)(double) throw () {aka double (*)(double)}
plahte.cpp:86:19: error: cannot bind rvalue '(long unsigned int)(y1 + ((sizetype)i))' to 'long unsigned int&'
In file included from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from plahte.cpp:1:
/usr/include/c++/10/istream:195:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long long int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' (near match)
  195 |       operator>>(long long& __n)
      |       ^~~~~~~~
/usr/include/c++/10/istream:195:7: note:   conversion of argument 1 would be ill-formed:
plahte.cpp:86:19: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'long long int' [-fpermissive]
   86 |   cin >> a >> y1[i] >> b >> y2[i];
      |               ~~~~^
      |                   |
      |                   double (*)(double) throw () {aka double (*)(double)}
plahte.cpp:86:19: error: cannot bind rvalue '(long long int)(y1 + ((sizetype)i))' to 'long long int&'
In file included from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from plahte.cpp:1:
/usr/include/c++/10/istream:199:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long long unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' (near match)
  199 |       operator>>(unsigned long long& __n)
      |       ^~~~~~~~
/usr/include/c++/10/istream:199:7: note:   conversion of argument 1 would be ill-formed:
plahte.cpp:86:19: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'long long unsigned int' [-fpermissive]
   86 |   cin >> a >> y1[i] >> b >> y2[i];
      |               ~~~~^
      |                   |
      |                   double (*)(double) throw () {aka double (*)(double)}
plahte.cpp:86:19: error: cannot bind rvalue '(long long unsigned int)(y1 + ((sizetype)i))' to 'long long unsigned int&'
In file included from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from plahte.cpp:1:
/usr/include/c++/10/istream:235:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(void*&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' (near match)
  235 |       operator>>(void*& __p)
      |       ^~~~~~~~
/usr/include/c++/10/istream:235:7: note:   conversion of argument 1 would be ill-formed:
plahte.cpp:86:19: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'void*' [-fpermissive]
   86 |   cin >> a >> y1[i] >> b >> y2[i];
      |               ~~~~^
      |                   |
      |                   double (*)(double) throw () {aka double (*)(double)}
plahte.cpp:86:19: error: cannot bind rvalue '(void*)(y1 + ((sizetype)i))' to 'void*&'
In file included from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from plahte.cpp:1:
/usr/include/c++/10/istream:214:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(float&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]'
  214 |       operator>>(float& __f)
      |       ^~~~~~~~
/usr/include/c++/10/istream:214:25: note:   no known conversion for argument 1 from 'double(double) throw ()' {aka 'double(double)'} to 'float&'
  214 |       operator>>(float& __f)
      |                  ~~~~~~~^~~
/usr/include/c++/10/istream:218:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(double&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]'
  218 |       operator>>(double& __f)
      |       ^~~~~~~~
/usr/include/c++/10/istream:218:26: note:   no known conversion for argument 1 from 'double(double) throw ()' {aka 'double(double)'} to 'double&'
  218 |       operator>>(double& __f)
      |                  ~~~~~~~~^~~
/usr/include/c++/10/istream:222:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long double&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]'
  222 |       operator>>(long double& __f)
      |       ^~~~~~~~
/usr/include/c++/10/istream:222:31: note:   no known conversion for argument 1 from 'double(double) throw ()' {aka 'double(double)'} to 'long double&'
  222 |       operator>>(long double& __f)
      |                  ~~~~~~~~~~~~~^~~
/usr/include/c++/10/istream:259:7: note: candidate: 'std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__streambuf_type*) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__streambuf_type = std::basic_streambuf<char>]'
  259 |       operator>>(__strea