#include<bits/stdc++.h>
using namespace std;
const int N=2e5;
struct node{
int num;
int id;
bool operator<(const node &cmp)const{
return num<cmp.num;
}
bool operator==(const node &cmp)const{
return num==cmp.num;
}
};
vector<node>x1[N];
vector<node>y1[N];
vector<node>x2[N];
vector<node>y2[N];
node xw1[N],xw2[N];
node yw1[N],yw2[N];
node xd1[N],xd2[N];
node yd1[N],yd2[N];
int f1[N];
int f2[N];
int main(){
int n1,n2;
scanf("%d%d",&n1,&n2);
for(int i=1;i<=n1;i++){
scanf("%d%d",&xw1[i].num,&yw1[i].num);
xw1[i].id=yw1[i].id=i;
xw2[i]=xw1[i];
yw2[i]=yw1[i];
}
for(int i=1;i<=n2;i++){
scanf("%d%d",&xd1[i],&yd1[i]);
xd1[i].id=yd1[i].id=i;
xd2[i]=xd1[i];
xd2[i]=xd1[i];
}
sort(xw2+1,xw2+n1+1);
int mx1=unique(xw2+1,xw2+n1+1)-xw2-1;
for(int i=1;i<=n1;i++){
xw1[i].num=lower_bound(xw2+1,xw2+n1+1,xw1[i])-xw2;
}
sort(yw2+1,yw2+n1+1);
int my1=unique(yw2+1,yw2+n1+1)-yw2-1;
for(int i=1;i<=n1;i++){
yw1[i].num=lower_bound(yw2+1,yw2+n1+1,yw1[i])-yw2;
}
sort(xd2+1,xd2+n2+1);
int mx2=unique(xd2+1,xd2+n2+1)-xd2-1;
for(int i=1;i<=n2;i++){
xd1[i].num=lower_bound(xd2+1,xd2+n2+1,xd1[i])-xd2;
}
sort(yd2+1,yd2+n2+1);
int my2=unique(yd2+1,yd2+n2+1)-yd2-1;
for(int i=1;i<=n2;i++){
yd1[i].num=lower_bound(yd2+1,yd2+n2+1,yd1[i])-yd2;
}
/*离散化*/
for(int i=1;i<=n1;i++){
x1[yw1[i].num].push_back(xw1[i]);//wis x
y1[xw1[i].num].push_back(yw1[i]);//wis y
}
for(int i=1;i<=n2;i++){
x2[yd2[i].num].push_back(xd2[i]);//dis x
y2[xd2[i].num].push_back(yd2[i]);//dis y
}
/*加点*/
for(int i=1;i<=mx1;i++){
sort(x1[i].begin(),x1[i].end());
}
for(int i=1;i<=my1;i++){
sort(y1[i].begin(),y1[i].end());
}
for(int i=1;i<=mx2;i++){
sort(x2[i].begin(),x2[i].end());
}
for(int i=1;i<=my2;i++){
sort(y2[i].begin(),y2[i].end());
}
/*排序*/
for(int i=1;i<=n1;i++){
//auto p=(x2[1]).lower_bound(x2[1].begin(),x2[1].end(),1);
int xmn=lower_bound(x2[yw1[i].num].begin(),x2[yw1[i].num].end(),xw1[i].num)-x2[yw1[i].num].begin()-1;
int xmx=upper_bound(x2[yw1[i].num].begin(),x2[yw1[i].num].end(),xw1[i].num)-x2[yw1[i].num].begin();
int ymn=lower_bound(y2[xw1[i].num].begin(),y2[xw1[i].num].end(),yw1[i].num)-y2[xw1[i].num].begin()-1;
int ymx=upper_bound(y2[xw1[i].num].begin(),y2[xw1[i].num].end(),yw1[i].num)-y2[xw1[i].num].begin();
if(xmn!=-1){
f1[i]=1;
f2[x2[yw1[i].num][xmn].id]=1;
}
if(xmx!=x2[yw1[i].num].end()-x2[yw1[i].num].begin()){
f1[i]=1;
f2[x2[yw1[i].num][xmx].id]=1;
}
if(ymn!=-1){
f1[i]=1;
f2[y2[xw1[i].num][ymn].id]=1;
}
if(ymx!=y2[xw1[i].num].end()-y2[xw1[i].num].begin()){
f1[i]=1;
f2[y2[xw1[i].num][ymx].id]=1;
}
}
for(int i=1;i<=n2;i++){
int xmn=lower_bound(x1[yw2[i].num].begin(),x1[yw2[i].num].end(),xw2[i].num)-x1[yw2[i].num].begin()-1;
int xmx=upper_bound(x1[yw2[i].num].begin(),x1[yw2[i].num].end(),xw2[i].num)-x1[yw2[i].num].begin();
int ymn=lower_bound(y1[xw2[i].num].begin(),y1[xw2[i].num].end(),yw2[i].num)-y1[xw2[i].num].begin()-1;
int ymx=upper_bound(y1[xw2[i].num].begin(),y1[xw2[i].num].end(),yw2[i].num)-y1[xw2[i].num].begin();
if(xmn!=-1){
f2[i]=1;
f1[x1[yw2[i].num][xmn].id]=1;
}
if(xmx!=x1[yw2[i].num].end()-x1[yw2[i].num].begin()){
f2[i]=1;
f1[x1[yw2[i].num][xmx].id]=1;
}
if(ymn!=-1){
f2[i]=1;
f1[y1[xw2[i].num][ymn].id]=1;
}
if(ymx!=y1[xw2[i].num].end()-y1[xw2[i].num].begin()){
f2[i]=1;
f1[y1[xw2[i].num][ymx].id]=1;
}
}
for(int i=1;i<=n1;i++){
printf("%d ",f1[i]);
}
printf("\n");
for(int i=1;i<=n2;i++){
printf("%d ",f2[i]);
}
printf("\n");
return 0;
}
其中一个报错信息
70 22 C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\bits\predefined_ops.h [Error] no match for 'operator<' (operand types are 'const int' and 'node')
dalao 求条。
2关