#include<iostream>
#include<cstdio>
using namespace std;
#define MAX 10
typedef int keytype;
typedef struct{
keytype key;
int link;
}Idxtype;
int Idxsearch(Idxtype a[],int b,keytype s[],keytype key,int n)
{
int low=1,high=b;
int mid;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid].key>=key) high=mid-1;
else low=mid+1;
}
int l=n/b;
int j,k;
if(a[low].link+l-1>n) j=n;
else j=a[low].link+l-1;
for(k=a[low].link;k<=j&&s[k]!=key;k++);
if(k<=j) return k;
else return 0;
}
int main()
{
int n,b;
int max=-10000;
int k=1;
keytype key;
keytype s[100];
Idxtype a[MAX];
scanf("%d",&n);
scanf("%d",&b);
scanf("%d",&key);
for(int i=1;i<=n;i++)
scanf("%d",&s[i]);
for(int i=1;i<=n;i=i+n/b)
{
max=-10000;
for(int j=i;j<i+n/b&&j<=n;j++)
{
if(max<s[j]) {max=s[j];}
}
a[k].key=max;
a[k].link=i;
k++;
}
int p=Idxsearch(a,b,s,key,n);
printf("%d\n",p);
return 0;
}
分块查找
最新推荐文章于 2024-07-15 08:43:45 发布