关于结构体lower_bound系统报错的问题
  • 板块学术版
  • 楼主PCCP
  • 当前回复16
  • 已保存回复16
  • 发布时间2023/1/6 21:47
  • 上次更新2023/10/24 05:20:44
查看原帖
关于结构体lower_bound系统报错的问题
310773
PCCP楼主2023/1/6 21:47

蒟蒻使用结构体lower_bound时,系统出现了大量报错,部分如下:

65	0	C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\bits\stl_algobase.h	In file included from C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include/c++/bits/stl_algobase.h
39		C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\bits\char_traits.h	                 from C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include/c++/bits/char_traits.h
# C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\bits\stl_iterator_base_types.h	In instantiation of 'struct std::iterator_traits<long long int>':
114	5	C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\bits\stl_iterator_base_funcs.h	required by substitution of 'template<class _InputIterator> typename std::iterator_traits<_Iterator>::difference_type std::distance(_InputIterator, _InputIterator) [with _InputIterator = long long int]'
165	53	C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\bits\stl_iterator_base_types.h	[Error] 'long long int' is not a class, struct, or union type

蒟蒻不知道是出现了什么故障,视乎也没有类型的转换问题,所以特来请问谷内大佬这是什么问题,蒟蒻必定关注回报。

原代码:

#include<iostream>
#include<cstdio>
#include<cmath> 
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=250010;
const int BLOCK=510;
int n,ans,blolen,blonum,bel[N];
int be[BLOCK],en[BLOCK],l[N];
struct ston{
	long long x,y,m,p,r,dist;
}s[N];
queue <ston> q;
bool cmp1(ston x,ston y){
	return x.dist<y.dist;
}
bool cmp2(ston x,ston y){
	return x.m<y.m;
}
long long distance(long long a,long long b){
	return (long long)sqrt((a-s[0].x)*(a-s[0].x)+(b-s[0].y)*(b-s[0].y));
}
void cut(){
	for(int i=1;i<=blonum;i++){
		be[i]=blolen*(i-1)+1;
		en[i]=blolen*i;
		sort(s+be[i],s+be[i]+blolen,cmp2);
		for(int j=be[i];j<=en[i];j++){
			bel[j]=i;
		}
	}
}
int solve(){
	while(q.size()){
		ston t=q.front();
		q.pop();
		ston fi;
		fi.m=fi.p=fi.r=fi.x=fi.y=0;
		fi.dist=t.dist;
		int last=lower_bound(s+1,s+n+1,fi)-s;
		if(s[last].dist>t.r){
			--last;
		}
		int enblo=bel[last];
		for(int i=1;i<enblo;i++){
			for(int j=be[i];j<=en[i];j++){
				if(s[j].m<=t.p){
					q.push(s[j]);
					++be[i];
					++ans;
				}
				else{
					break;
				}
			}
		}
		for(int i=be[enblo];i<=last;i++){
			if(s[i].m<=t.p){
				q.push(s[i]);
				++be[be[enblo]];
				++ans;
			}
			else{
				break;
			}
		}
	}
}
int main(){
	scanf("%lld%lld%lld%lld%d",&s[0].x,&s[0].y,&s[0].p,&s[0].r,&n);
	s[0].m=10000000001; 
	q.push(s[0]);
	blolen=floor((double)sqrt(n*1.0));
	blonum=ceil((double)n*1.0/blolen);
	for(int i=1;i<=n;i++){
		scanf("%lld%lld%lld%lld%lld",&s[i].x,&s[i].y,&s[i].m,&s[i].p,&s[i].r);
		s[i].dist=distance(s[i].x,s[i].y);
	}
	sort(s+1,s+n+1,cmp1);
	cut();
	solve();
	printf("%d\n",ans);
}
2023/1/6 21:47
加载中...