Submission #49579

# Submission time Handle Problem Language Result Execution time Memory
49579 2018-05-31T12:28:59 Z dongwon0427 New Home (APIO18_new_home) C++17
Compilation error
0 ms 0 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MX=300010, inf=1<<29;
 
struct SHOP {
	int x, type, s, e, idx;
} S[MX];
 
struct QUERY {
	int x, t, idx, ans;
} Q[MX];
 
inline int max(int x, int y){ return x>y ? x : y; }
 
int n, q, k;
 
void input(){
	cin>>n>>k>>q;
	for(int i=1; i<=n; i++){
		int t, x, s, e;
		cin>>x>>t>>s>>e;
		S[i]={x,t,s,e,i};
	}
	for(int i=1; i<=q; i++){
		int x, t;
		cin>>x>>t;
		Q[i]={x,t,i};
	}
}
 
vector<int> X;
int xmax;
 
int lo(int x){
	return upper_bound(X.begin(), X.end(), x)-X.begin()-1;
}
int hi(int x){
	return lower_bound(X.begin(), X.end(), x)-X.begin();
}
 
void prec(){
	for(int i=1; i<=n; i++){
		S[i].x*=2;
	}
	for(int i=1; i<=q; i++){
		Q[i].x*=2;
		X.push_back(Q[i].x);
	}
	sort(X.begin(), X.end());
	X.resize(unique(X.begin(), X.end())-X.begin());
	xmax=X.size()-1U;
}
 
//////
 
multiset<int> pos[MX];
int nonzero_cnt;
 
// seg
 
struct SegTree {
	int tree[4*MX]={};
	multiset<int> leaf[MX];
	// [0, xmax]
 
	void init(){
		for(int i=1; i<=4*xmax; i++) tree[i]=-inf;
	}
 
	int mx(int v, int s, int e, int l, int r){
		if(r<s || e<l) return -inf;
		if(l<=s && e<=r) return tree[v];
		return max(mx(v*2, s, (s+e)/2, l, r), mx(v*2+1, (s+e)/2+1, e, l, r));
	}
	int mx(int l, int r){
		return mx(1,0,xmax,l,r);
	}
	void upt(int v, int s, int e, int x){
		if(x<s || e<x) return;
		if(s==e){
			if(leaf[x].empty()) tree[v]=-inf;
			else tree[v]=*leaf[x].rbegin();
			return;
		}
		upt(v*2, s, (s+e)/2, x);
		upt(v*2+1, (s+e)/2+1, e, x);
		tree[v]=max(tree[v*2], tree[v*2+1]);
	}
	void put(int x, int val){
		if(x<0 || xmax<x) return;
		leaf[x].insert(val);
		upt(1,0,xmax,x);
	}
	void pop(int x, int val){
		if(x<0 || xmax<x) return;
		leaf[x].erase(leaf[x].find(val));
		upt(1,0,xmax,x);
	}
} Seg1, Seg2;
 
// 1이 /, 2가 \
1: max(y-x), 2: max(y+x)
 
void add(int x1, int x2){
	int mx=(0LL+x1+x2)/2, my=(0LL+x2-x1)/2;
	Seg1.put(lo(mx), my-mx);
	Seg2.put(hi(mx), my+mx);
}
 
void del(int x1, int x2){
	int mx=(0LL+x1+x2)/2, my=(0LL+x2-x1)/2;
	Seg1.pop(lo(mx), my-mx);
	Seg2.pop(hi(mx), my+mx);
}
 
int find(int qx){
	if(nonzero_cnt<k) return -2;
	int x=lo(qx);
	int ans=max(Seg1.mx(x, xmax)+qx, Seg2.mx(0, x)-qx);
	return ans;
}
 
////
 
void add_store(int idx){
	multiset<int> &stores = pos[S[idx].type];
 
	if(pos[S[idx].type].size()==2U) nonzero_cnt++;
 
	int x=S[idx].x;
 
	if(pos[S[idx].type].find(x)==pos[S[idx].type].end()){
		multiset<int> it1=lower_bound(pos[S[idx].type].begin(),pos[S[idx].type].end(),x);
		multiset<int> it2=it1; it2--;
		int lx=*it2, rx=*it1;
		del(lx, rx);
		add(lx, x); add(x, rx);
	}
 
	pos[S[idx].type].insert(x);
}
 
void del_store(int idx){
	multiset<int> &stores = pos[S[idx].type];
 
	if(stores.size()==3U) nonzero_cnt--;
 
	int x=S[idx].x;
 
	stores.erase(stores.find(x));
 
	if(stores.find(x)!=stores.end())
		return;
 
	multiset<int> it1=lower_bound(stores.begin(),stores.end(),x);
	multiset<int> it2=it1; it2--;
	int lx=*it2, rx=*it1;
	del(lx, x); del(x, rx);
	add(lx, rx);
}
 
void init(){
	Seg1.init();
	Seg2.init();
	for(int i=1; i<=k; i++){
		pos[i].insert(inf);
		pos[i].insert(-inf);
		add(-inf, inf);
	}
}
 
void solve(){
	vector<pii> in, out;
	for(int i=1; i<=n; i++){
		in.push_back({S[i].s, i});
		out.push_back({S[i].e, i});
	}
	sort(Q+1, Q+q+1, [](QUERY &a, QUERY &b){ return a.t<b.t; });
	sort(in.begin(), in.end());
	sort(out.begin(), out.end());
 
	init();
 
	for(int i=1, a=0, b=0; i<=q; i++){
		int qt=Q[i].t, qx=Q[i].x;
		while(a<n){
			int t,idx; tie(t,idx)=in[a];
			if(qt<t) break;
			a++;
			add_store(idx);
		}
		while(b<n){
			int t,idx; tie(t,idx)=out[b];
			if(qt<=t) break;
			b++;
			del_store(idx);
		}
		Q[i].ans=find(qx);
	}
}
 
 
int main(){
	ios::sync_with_stdio(0); cin.tie(0);
	input();
	prec();
	solve();
 
	sort(Q+1, Q+q+1, [](QUERY &a, QUERY &b){ return a.idx<b.idx; });
	for(int i=1; i<=q; i++){
		cout<<Q[i].ans/2<<'\n';
	}
	return 0;
}

Compilation message

new_home.cpp:103:1: warning: multi-line comment [-Wcomment]
 // 1이 /, 2가 \
 ^
new_home.cpp: In function 'void add_store(int)':
new_home.cpp:135:32: error: conversion from 'std::_Rb_tree_const_iterator<int>' to non-scalar type 'std::multiset<int>' requested
   multiset<int> it1=lower_bound(pos[S[idx].type].begin(),pos[S[idx].type].end(),x);
                     ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
new_home.cpp:136:29: error: no 'operator--(int)' declared for postfix '--' [-fpermissive]
   multiset<int> it2=it1; it2--;
                          ~~~^~
new_home.cpp:137:10: error: no match for 'operator*' (operand type is 'std::multiset<int>')
   int lx=*it2, rx=*it1;
          ^~~~
In file included from /usr/include/c++/7/ccomplex:39:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:52,
                 from new_home.cpp:1:
/usr/include/c++/7/complex:386:5: note: candidate: template<class _Tp> std::complex<_Tp> std::operator*(const std::complex<_Tp>&, const std::complex<_Tp>&)
     operator*(const complex<_Tp>& __x, const complex<_Tp>& __y)
     ^~~~~~~~
/usr/include/c++/7/complex:386:5: note:   template argument deduction/substitution failed:
new_home.cpp:137:11: note:   'std::multiset<int>' is not derived from 'const std::complex<_Tp>'
   int lx=*it2, rx=*it1;
           ^~~
In file included from /usr/include/c++/7/ccomplex:39:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:52,
                 from new_home.cpp:1:
/usr/include/c++/7/complex:395:5: note: candidate: template<class _Tp> std::complex<_Tp> std::operator*(const std::complex<_Tp>&, const _Tp&)
     operator*(const complex<_Tp>& __x, const _Tp& __y)
     ^~~~~~~~
/usr/include/c++/7/complex:395:5: note:   template argument deduction/substitution failed:
new_home.cpp:137:11: note:   'std::multiset<int>' is not derived from 'const std::complex<_Tp>'
   int lx=*it2, rx=*it1;
           ^~~
In file included from /usr/include/c++/7/ccomplex:39:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:52,
                 from new_home.cpp:1:
/usr/include/c++/7/complex:404:5: note: candidate: template<class _Tp> std::complex<_Tp> std::operator*(const _Tp&, const std::complex<_Tp>&)
     operator*(const _Tp& __x, const complex<_Tp>& __y)
     ^~~~~~~~
/usr/include/c++/7/complex:404:5: note:   template argument deduction/substitution failed:
new_home.cpp:137:11: note:   candidate expects 2 arguments, 1 provided
   int lx=*it2, rx=*it1;
           ^~~
In file included from /usr/include/c++/7/valarray:592:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:95,
                 from new_home.cpp:1:
/usr/include/c++/7/bits/valarray_after.h:404:5: note: candidate: template<class _Dom1, class _Dom2> std::_Expr<std::_BinClos<std::__multiplies, std::_Expr, std::_Expr, _Dom1, _Dom2>, typename std::__fun<std::__multiplies, typename _Dom1::value_type>::result_type> std::operator*(const std::_Expr<_Dom1, typename _Dom1::value_type>&, const std::_Expr<_Dom2, typename _Dom2::value_type>&)
     _DEFINE_EXPR_BINARY_OPERATOR(*, __multiplies)
     ^
/usr/include/c++/7/bits/valarray_after.h:404:5: note:   template argument deduction/substitution failed:
new_home.cpp:137:11: note:   'std::multiset<int>' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
   int lx=*it2, rx=*it1;
           ^~~
In file included from /usr/include/c++/7/valarray:592:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:95,
                 from new_home.cpp:1:
/usr/include/c++/7/bits/valarray_after.h:404:5: note: candidate: template<class _Dom> std::_Expr<std::_BinClos<std::__multiplies, std::_Expr, std::_Constant, _Dom, typename _Dom::value_type>, typename std::__fun<std::__multiplies, typename _Dom1::value_type>::result_type> std::operator*(const std::_Expr<_Dom1, typename _Dom1::value_type>&, const typename _Dom::value_type&)
     _DEFINE_EXPR_BINARY_OPERATOR(*, __multiplies)
     ^
/usr/include/c++/7/bits/valarray_after.h:404:5: note:   template argument deduction/substitution failed:
new_home.cpp:137:11: note:   'std::multiset<int>' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
   int lx=*it2, rx=*it1;
           ^~~
In file included from /usr/include/c++/7/valarray:592:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:95,
                 from new_home.cpp:1:
/usr/include/c++/7/bits/valarray_after.h:404:5: note: candidate: template<class _Dom> std::_Expr<std::_BinClos<std::__multiplies, std::_Constant, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__multiplies, typename _Dom1::value_type>::result_type> std::operator*(const typename _Dom::value_type&, const std::_Expr<_Dom1, typename _Dom1::value_type>&)
     _DEFINE_EXPR_BINARY_OPERATOR(*, __multiplies)
     ^
/usr/include/c++/7/bits/valarray_after.h:404:5: note:   template argument deduction/substitution failed:
new_home.cpp:137:11: note:   candidate expects 2 arguments, 1 provided
   int lx=*it2, rx=*it1;
           ^~~
In file included from /usr/include/c++/7/valarray:592:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:95,
                 from new_home.cpp:1:
/usr/include/c++/7/bits/valarray_after.h:404:5: note: candidate: template<class _Dom> std::_Expr<std::_BinClos<std::__multiplies, std::_Expr, std::_ValArray, _Dom, typename _Dom::value_type>, typename std::__fun<std::__multiplies, typename _Dom1::value_type>::result_type> std::operator*(const std::_Expr<_Dom1, typename _Dom1::value_type>&, const std::valarray<typename _Dom::value_type>&)
     _DEFINE_EXPR_BINARY_OPERATOR(*, __multiplies)
     ^
/usr/include/c++/7/bits/valarray_after.h:404:5: note:   template argument deduction/substitution failed:
new_home.cpp:137:11: note:   'std::multiset<int>' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
   int lx=*it2, rx=*it1;
           ^~~
In file included from /usr/include/c++/7/valarray:592:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:95,
                 from new_home.cpp:1:
/usr/include/c++/7/bits/valarray_after.h:404:5: note: candidate: template<class _Dom> std::_Expr<std::_BinClos<std::__multiplies, std::_ValArray, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__multiplies, typename _Dom1::value_type>::result_type> std::operator*(const std::valarray<typename _Dom::value_type>&, const std::_Expr<_Dom1, typename _Dom1::value_type>&)
     _DEFINE_EXPR_BINARY_OPERATOR(*, __multiplies)
     ^
/usr/include/c++/7/bits/valarray_after.h:404:5: note:   template argument deduction/substitution failed:
new_home.cpp:137:11: note:   candidate expects 2 arguments, 1 provided
   int lx=*it2, rx=*it1;
           ^~~
In file included from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:95:0,
                 from new_home.cpp:1:
/usr/include/c++/7/valarray:1174:1: note: candidate: template<class _Tp> std::_Expr<std::_BinClos<std::__multiplies, std::_ValArray, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__multiplies, _Tp>::result_type> std::operator*(const std::valarray<_Tp>&, const std::valarray<_Tp>&)
 _DEFINE_BINARY_OPERATOR(*, __multiplies)
 ^
/usr/include/c++/7/valarray:1174:1: note:   template argument deduction/substitution failed:
new_home.cpp:137:11: note:   'std::multiset<int>' is not derived from 'const std::valarray<_Tp>'
   int lx=*it2, rx=*it1;
           ^~~
In file included from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:95:0,
                 from new_home.cpp:1:
/usr/include/c++/7/valarray:1174:1: note: candidate: template<class _Tp> std::_Expr<std::_BinClos<std::__multiplies, std::_ValArray, std::_Constant, _Tp, _Tp>, typename std::__fun<std::__multiplies, _Tp>::result_type> std::operator*(const std::valarray<_Tp>&, const _Tp&)
 _DEFINE_BINARY_OPERATOR(*, __multiplies)
 ^
/usr/include/c++/7/valarray:1174:1: note:   template argument deduction/substitution failed:
new_home.cpp:137:11: note:   'std::multiset<int>' is not derived from 'const std::valarray<_Tp>'
   int lx=*it2, rx=*it1;
           ^~~
In file included from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:95:0,
                 from new_home.cpp:1:
/usr/include/c++/7/valarray:1174:1: note: candidate: template<class _Tp> std::_Expr<std::_BinClos<std::__multiplies, std::_Constant, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__multiplies, _Tp>::result_type> std::operator*(const _Tp&, const std::valarray<_Tp>&)
 _DEFINE_BINARY_OPERATOR(*, __multiplies)
 ^
/usr/include/c++/7/valarray:1174:1: note:   template argument deduction/substitution failed:
new_home.cpp:137:11: note:   candidate expects 2 arguments, 1 provided
   int lx=*it2, rx=*it1;
           ^~~
new_home.cpp:138:11: error: 'rx' was not declared in this scope
   del(lx, rx);
           ^~
new_home.cpp:138:11: note: suggested alternative: 'lx'
   del(lx, rx);
           ^~
           lx
new_home.cpp:128:17: warning: unused variable 'stores' [-Wunused-variable]
  multiset<int> &stores = pos[S[idx].type];
                 ^~~~~~
new_home.cpp: In function 'void del_store(int)':
new_home.cpp:157:31: error: conversion from 'std::_Rb_tree_const_iterator<int>' to non-scalar type 'std::multiset<int>' requested
  multiset<int> it1=lower_bound(stores.begin(),stores.end(),x);
                    ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
new_home.cpp:158:28: error: no 'operator--(int)' declared for postfix '--' [-fpermissive]
  multiset<int> it2=it1; it2--;
                         ~~~^~
new_home.cpp:159:9: error: no match for 'operator*' (operand type is 'std::multiset<int>')
  int lx=*it2, rx=*it1;
         ^~~~
In file included from /usr/include/c++/7/ccomplex:39:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:52,
                 from new_home.cpp:1:
/usr/include/c++/7/complex:386:5: note: candidate: template<class _Tp> std::complex<_Tp> std::operator*(const std::complex<_Tp>&, const std::complex<_Tp>&)
     operator*(const complex<_Tp>& __x, const complex<_Tp>& __y)
     ^~~~~~~~
/usr/include/c++/7/complex:386:5: note:   template argument deduction/substitution failed:
new_home.cpp:159:10: note:   'std::multiset<int>' is not derived from 'const std::complex<_Tp>'
  int lx=*it2, rx=*it1;
          ^~~
In file included from /usr/include/c++/7/ccomplex:39:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:52,
                 from new_home.cpp:1:
/usr/include/c++/7/complex:395:5: note: candidate: template<class _Tp> std::complex<_Tp> std::operator*(const std::complex<_Tp>&, const _Tp&)
     operator*(const complex<_Tp>& __x, const _Tp& __y)
     ^~~~~~~~
/usr/include/c++/7/complex:395:5: note:   template argument deduction/substitution failed:
new_home.cpp:159:10: note:   'std::multiset<int>' is not derived from 'const std::complex<_Tp>'
  int lx=*it2, rx=*it1;
          ^~~
In file included from /usr/include/c++/7/ccomplex:39:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:52,
                 from new_home.cpp:1:
/usr/include/c++/7/complex:404:5: note: candidate: template<class _Tp> std::complex<_Tp> std::operator*(const _Tp&, const std::complex<_Tp>&)
     operator*(const _Tp& __x, const complex<_Tp>& __y)
     ^~~~~~~~
/usr/include/c++/7/complex:404:5: note:   template argument deduction/substitution failed:
new_home.cpp:159:10: note:   candidate expects 2 arguments, 1 provided
  int lx=*it2, rx=*it1;
          ^~~
In file included from /usr/include/c++/7/valarray:592:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:95,
                 from new_home.cpp:1:
/usr/include/c++/7/bits/valarray_after.h:404:5: note: candidate: template<class _Dom1, class _Dom2> std::_Expr<std::_BinClos<std::__multiplies, std::_Expr, std::_Expr, _Dom1, _Dom2>, typename std::__fun<std::__multiplies, typename _Dom1::value_type>::result_type> std::operator*(const std::_Expr<_Dom1, typename _Dom1::value_type>&, const std::_Expr<_Dom2, typename _Dom2::value_type>&)
     _DEFINE_EXPR_BINARY_OPERATOR(*, __multiplies)
     ^
/usr/include/c++/7/bits/valarray_after.h:404:5: note:   template argument deduction/substitution failed:
new_home.cpp:159:10: note:   'std::multiset<int>' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  int lx=*it2, rx=*it1;
          ^~~
In file included from /usr/include/c++/7/valarray:592:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:95,
                 from new_home.cpp:1:
/usr/include/c++/7/bits/valarray_after.h:404:5: note: candidate: template<class _Dom> std::_Expr<std::_BinClos<std::__multiplies, std::_Expr, std::_Constant, _Dom, typename _Dom::value_type>, typename std::__fun<std::__multiplies, typename _Dom1::value_type>::result_type> std::operator*(const std::_Expr<_Dom1, typename _Dom1::value_type>&, const typename _Dom::value_type&)
     _DEFINE_EXPR_BINARY_OPERATOR(*, __multiplies)
     ^
/usr/include/c++/7/bits/valarray_after.h:404:5: note:   template argument deduction/substitution failed:
new_home.cpp:159:10: note:   'std::multiset<int>' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  int lx=*it2, rx=*it1;
          ^~~
In file included from /usr/include/c++/7/valarray:592:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:95,
                 from new_home.cpp:1:
/usr/include/c++/7/bits/valarray_after.h:404:5: note: candidate: template<class _Dom> std::_Expr<std::_BinClos<std::__multiplies, std::_Constant, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__multiplies, typename _Dom1::value_type>::result_type> std::operator*(const typename _Dom::value_type&, const std::_Expr<_Dom1, typename _Dom1::value_type>&)
     _DEFINE_EXPR_BINARY_OPERATOR(*, __multiplies)
     ^
/usr/include/c++/7/bits/valarray_after.h:404:5: note:   template argument deduction/substitution failed:
new_home.cpp:159:10: note:   candidate expects 2 arguments, 1 provided
  int lx=*it2, rx=*it1;
          ^~~
In file included from /usr/include/c++/7/valarray:592:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:95,
                 from new_home.cpp:1:
/usr/include/c++/7/bits/valarray_after.h:404:5: note: candidate: template<class _Dom> std::_Expr<std::_BinClos<std::__multiplies, std::_Expr, std::_ValArray, _Dom, typename _Dom::value_type>, typename std::__fun<std::__multiplies, typename _Dom1::value_type>::result_type> std::operator*(const std::_Expr<_Dom1, typename _Dom1::value_type>&, const std::valarray<typename _Dom::value_type>&)
     _DEFINE_EXPR_BINARY_OPERATOR(*, __multiplies)
     ^
/usr/include/c++/7/bits/valarray_after.h:404:5: note:   template argument deduction/substitution failed:
new_home.cpp:159:10: note:   'std::multiset<int>' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  int lx=*it2, rx=*it1;
          ^~~
In file included from /usr/include/c++/7/valarray:592:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:95,
                 from new_home.cpp:1:
/usr/include/c++/7/bits/valarray_after.h:404:5: note: candidate: template<class _Dom> std::_Expr<std::_BinClos<std::__multiplies, std::_ValArray, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__multiplies, typename _Dom1::value_type>::result_type> std::operator*(const std::valarray<typename _Dom::value_type>&, const std::_Expr<_Dom1, typename _Dom1::value_type>&)
     _DEFINE_EXPR_BINARY_OPERATOR(*, __multiplies)
     ^
/usr/include/c++/7/bits/valarray_after.h:404:5: note:   template argument deduction/substitution failed:
new_home.cpp:159:10: note:   candidate expects 2 arguments, 1 provided
  int lx=*it2, rx=*it1;
          ^~~
In file included from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:95:0,
                 from new_home.cpp:1:
/usr/include/c++/7/valarray:1174:1: note: candidate: template<class _Tp> std::_Expr<std::_BinClos<std::__multiplies, std::_ValArray, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__multiplies, _Tp>::result_type> std::operator*(const std::valarray<_Tp>&, const std::valarray<_Tp>&)
 _DEFINE_BINARY_OPERATOR(*, __multiplies)
 ^
/usr/include/c++/7/valarray:1174:1: note:   template argument deduction/substitution failed:
new_home.cpp:159:10: note:   'std::multiset<int>' is not derived from 'const std::valarray<_Tp>'
  int lx=*it2, rx=*it1;
          ^~~
In file included from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:95:0,
                 from new_home.cpp:1:
/usr/include/c++/7/valarray:1174:1: note: candidate: template<class _Tp> std::_Expr<std::_BinClos<std::__multiplies, std::_ValArray, std::_Constant, _Tp, _Tp>, typename std::__fun<std::__multiplies, _Tp>::result_type> std::operator*(const std::valarray<_Tp>&, const _Tp&)
 _DEFINE_BINARY_OPERATOR(*, __multiplies)
 ^
/usr/include/c++/7/valarray:1174:1: note:   template argument deduction/substitution failed:
new_home.cpp:159:10: note:   'std::multiset<int>' is not derived from 'const std::valarray<_Tp>'
  int lx=*it2, rx=*it1;
          ^~~
In file included from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:95:0,
                 from new_home.cpp:1:
/usr/include/c++/7/valarray:1174:1: note: candidate: template<class _Tp> std::_Expr<std::_BinClos<std::__multiplies, std::_Constant, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__multiplies, _Tp>::result_type> std::operator*(const _Tp&, const std::valarray<_Tp>&)
 _DEFINE_BINARY_OPERATOR(*, __multiplies)
 ^
/usr/include/c++/7/valarray:1174:1: note:   template argument deduction/substitution failed:
new_home.cpp:159:10: note:   candidate expects 2 arguments, 1 provided
  int lx=*it2, rx=*it1;
          ^~~
new_home.cpp:160:21: error: 'rx' was not declared in this scope
  del(lx, x); del(x, rx);
                     ^~
new_home.cpp:160:21: note: suggested alternative: 'lx'
  del(lx, x); del(x, rx);
                     ^~
                     lx