数据量很大,查找的时候很耗时间,就想到队长所说的二分算法了,又码了一遍,加深一下印象。
就是注意存储数据时用long long 来存储,要不会爆掉。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<math.h>
using namespace std;
const int MAX=2000000000;
const int maxn=200000;
long long int a[maxn];
int n;
int find(long long int num){ //二分进行查找。
int left=0,right=n+1;
a[right]=(long long int)(MAX)*(long long int)(maxn);
while(right-left>1){
int middle=(left+right)/2;
if(a[middle]<num)left=middle;
else right=middle;
}
//if(left==0)left++;
return right;
}
int main()
{
int m;
while( scanf("%d%d",&n,&m )!=EOF ){
long long int c,t;
for(int i=1;i<=n;i++){
scanf("%I64d %I64d",&c,&t);
a[i]=a[i-1]+c*t;
}
long long int num;
for(int i=1;i<=m;i++){
scanf("%I64d",&num);
int pos=find(num);
printf("%d\n",pos);
}
}
return 0;
}

本文通过解决一个数据查询效率问题,介绍了如何使用二分查找算法提高查找速度,并提供了完整的C++实现代码。文章强调了在处理大数据量时采用合适的数据类型(如long long int)以避免溢出的重要性。

被折叠的 条评论
为什么被折叠?



