蒟蒻使用结构体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);
}