vector结构体不能upper_bound?
  • 板块学术版
  • 楼主xu_zhihao
  • 当前回复11
  • 已保存回复13
  • 发布时间2024/10/2 22:10
  • 上次更新2024/10/3 09:33:48
查看原帖
vector结构体不能upper_bound?
1063855
xu_zhihao楼主2024/10/2 22:10
#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关

2024/10/2 22:10
加载中...