一堆石頭
作法:利用2分搜尋+getchar 來解決陣列沒辦法開那麼大
/**************************************************/
#include<stdlib.h>
#include<stdio.h>
int index1(int);
int L=0,a,b;
int ans[300001]={0},ansnumber[300001]={0};
main()
{
int n=0,m=0,top,temp;
while(1)
{
temp=getchar();
if(temp==-1) break;
if(temp<=57&&temp>=48) m=m*10+temp-48;
else
{
n++;
int index=index1(m);
if(index!=-1) ansnumber[index]++;
else
{
int now=-1;
for(a=0;a<L&&now==-1;a++)
if(ans[a]>m) now=a;
if(now==-1) now=L;
for(a=L;a>now;a--)
{ans[a]=ans[a-1];ansnumber[a]=ansnumber[a-1];}
ans[now]=m;
ansnumber[now]=1;
L++;
}
m=0;
}
}
for(a=0;a<L;a++) if(ansnumber[a]==2) {printf("%d\n",ans[a]);break;}
return 0;
}
int index1(int n)
{
int lower=0, mid, high=L-1;
int index=-1;
do
{
mid=(lower+high)/2;
if(ans[mid]<n)
lower=mid+1;
else if(ans[mid]>n)
high=mid-1;
else
index=mid;
}
while(index==-1&&lower<=high);
return index;
}
上一篇:一堆線段
下一篇:Problem 47