标签:col 输入输出 次数 scanf 之间 style bsp 大小 100%
弄一个仙女的珍珠吧(天堂珍珠)。
要用二分查找。
(信息学竞赛班的女生都是仙女~)我有很多很多(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\n",d); } return 0; }
标签:col 输入输出 次数 scanf 之间 style bsp 大小 100%
原文地址:https://www.cnblogs.com/wenzile/p/10710026.html