我的第一篇博客(激动无比!!!)
Posted wenzile
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的第一篇博客(激动无比!!!)相关的知识,希望对你有一定的参考价值。
弄一个仙女的珍珠吧(天堂珍珠)。
要用二分查找。
#226. 仙女的珍珠
题目描述
(信息学竞赛班的女生都是仙女~)我有很多很多(n条)用魔法合成的珍珠项链......(其实神仙比凡人更爱美),每天起来我都要从中挑一条戴上......挑哪条很有讲究,如果比情敌的难看,那么就会被嘲笑(-_-),可是如果比天后Hera的好看,那么就完蛋了(-_-)。所以我希望你能帮帮我,解决这个令人头疼的问题:每天帮我算算,那天我能戴的项链有多少条。
输入输出格式
输入格式:
第一行为正整数n(项链总条数)。
第二行有n个整数(代表每条项链晶的好看程度Xi,0≤Xi≤max long int。)
第三行为正整数m,表示总天数(也就是总询问次数)。
以下m行,每行两个整数Ai,Bi(1≤Ai,Bi≤max long int),询问好看程度在Ai到Bi之间的项链条数(含等于Ai或Bi的,Ai与Bi大小关系不确定)。
输出格式:
m行,对于每次询问输出一行,从Ai到Bi(含Ai,Bi)好看程度在Ai到Bi之间的项链条数。
输入输出样例
输入样例:
7 8 2 3 5 6 7 7 6 1 5 8 6 1 10 5 5 4 4 7 8
输出样例:
3 4 7 1 0 3
说明
数据规模:
对于25%数据,有m,n≤1000。
对于100%数据,有m,n≤100000。
// WZL //仙女的珍珠 #include<iostream> #include<fstream> #include<algorithm> #include<cstdio> using namespace std; int n,m,a[1000000],x,y; int Binary_Searchl(int x); int Binary_Searchr(int x); int Binary_Searchl(int x)//求left { int left=0,right=n+1,mid; while(left+1<right) { mid=(left+right)/2; if(a[mid]<x) { left=mid; } else { right=mid; } } return right; } int Binary_Searchr(int x)//求right { int left=0,right=n+1,mid; while(left+1<right) { mid=(left+right)/2; if(a[mid]>x) { right=mid; } else { left=mid; } } return right; } int main() { scanf("%d",&n);//二分很容易超时,用scanf for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } sort(a+1,a+n+1); scanf("%d",&m); for(int i=1;i<=m;i++) { scanf("%d%d",&x,&y); int d=0; if(x>y)//比大小 { swap(x,y); } d=Binary_Searchr(y)-Binary_Searchl(x);//调用子函数 printf("%d ",d); } return 0; }
以上是关于我的第一篇博客(激动无比!!!)的主要内容,如果未能解决你的问题,请参考以下文章