Codeforces Round #367 (Div. 2) B Interesting drink【二分】
2016-08-12 09:55
429 查看
Codeforces Round #367 (Div. 2) B Interesting drink 【二分】
题目链接:http://codeforces.com/contest/706/problem/B题意:每次寻找q次, 在n个数字里面找到 <=t 的个数
#include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <ctime> #include <set> #include <map> #include <cmath> using namespace std; #define eps 1e-6 #define pi 3.14159265359 typedef long long LL; const int maxn = 100100; LL i,n,m,k,t; LL a[maxn]; int main(){ while(~scanf("%lld",&n)){ for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); } sort(a+1,a+1+n); scanf("%lld",&k); while(k--){ scanf("%lld",&t); int so = upper_bound(a+1,a+n+1,t)-a-1; //搜索 >=t 的第一个元素位置 printf("%d\n",so); } } return 0; }
upper_bound() 就是二分搜索,手写的有毒WA n发,时间效率是一样的
搜索左边le
#include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <ctime> #include <set> #include <map> #include <cmath> using namespace std; #define eps 1e-6 #define pi 3.14159265359 typedef long long LL; const int maxn = 100100; LL j,i,n,m,k,t; LL a[maxn]; int main(){ while(~scanf("%lld",&n)){ for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); } sort(a+1,a+1+n); scanf("%lld",&k); while(k--){ scanf("%lld",&t); if(t<a[1]){ printf("0\n"); continue; } if(t>=a ){ printf("%lld\n",n); continue; } int flag1 = 0; LL x,mi,le = 1,ri = n; while(le<ri){ mi = (le+ri)/2; if(t>=a[mi]){// >=t的第一个元素 le = mi+1; }else{ ri = mi; } } printf("%lld\n",le-1); } } return 0; }
搜索中间mi
#include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <ctime> #include <set> #include <map> #include <cmath> using namespace std; typedef long long LL; const int maxn = 100100; LL j,i,n,m,k,t; LL a[maxn]; int main(){ while(~scanf("%lld",&n)){ for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); } sort(a+1,a+1+n); scanf("%lld",&k); while(k--){ scanf("%lld",&t); if(t<a[1]){ printf("0\n"); continue; } if(t>=a ){ printf("%lld\n",n); continue; } int flag1 = 0; LL x,mi,le = 1,ri = n; while(le<=ri){ mi = (le+ri)/2; if(t>=a[mi]){ x = mi; le = mi+1; }else{ ri = mi-1; } } printf("%lld\n",x); } } return 0; }
相关文章推荐
- 【Codeforces Round 367 (Div 2) B】【二分查找】Interesting drink
- Codeforces Round #367 (Div. 2) B. Interesting drink(二分)
- Codeforces Round #283 (Div. 2) D. Tennis Game 二分
- Codeforces Round #330 (Div. 2)D. Max and Bike 二分 物理
- Codeforces Round #404 (Div. 2) -- C. Anton and Fairy Tale(二分)
- Codeforces Round #367 (Div. 2)E
- Codeforces Round #277.5 (Div. 2) E. Hiking(二分 DP)
- Codeforces Round #403 (Div. 2) B 二分 or 三分
- D. One-Dimensional Battle Ships-二分答案-Codeforces Round #Pi (Div. 2)
- Codeforces Round #394 (Div. 2) D. Dasha and Very Difficult Problem 贪心,二分
- Codeforces Round #388 (Div. 2)D. Leaving Auction(二分+思维)
- 【Codeforces Round 367 (Div 2) C】【简单DP】Hard problem
- Codeforces Round #299 (Div. 1) A. Tavas and Karafs(二分)
- Codeforces Round #182 (Div. 1) B. Yaroslav and Time(二分+SPFA变形)
- Codeforces Round #Pi (Div. 2) D. One-Dimensional Battle Ships 二分 stl应用
- 【Codeforces Round 367 (Div 2) D】【字典树典型题】Vasiliy's Multiset
- Codeforces Round #307 (Div. 2) C. GukiZ hates Boxes 贪心/二分
- Codeforces Round #350 (Div. 2) D Magic Powder (二分)
- Codeforces Round #279 (Div. 2) E. Restoring Increasing Sequence 二分
- E. Vladik and cards Codeforces Round #384 (Div. 2) 好题 二分+(贪心+状态压缩DP)判断