/*记得以前做cf就吃过这上面的亏,今天队里的比赛又挂了好几次才推 出来。。。晚上整理了一下,分别写了写>= , > , <= , <这四种情况。(== 就 不用写了),测试数据包含最小值和最大值的测试,有些情况结果是非法的,输出为-1 或 n*/ //#pragma comment(linker,"/STACK:327680000,327680000") #include <iostream> #include <cstdio> #include <cmath> #include <vector> #include <cstring> #include <algorithm> #include <string> #include <set> #include <functional> #include <numeric> #include <sstream> #include <stack> #include <map> #include <queue> #define CL(arr, val) memset(arr, val, sizeof(arr)) #define REP(i, n) for((i) = 0; (i) < (n); ++(i)) #define FOR(i, l, h) for((i) = (l); (i) <= (h); ++(i)) #define FORD(i, h, l) for((i) = (h); (i) >= (l); --(i)) #define L(x) (x) << 1 #define R(x) (x) << 1 | 1 #define MID(l, r) (l + r) >> 1 #define Min(x, y) (x) < (y) ? (x) : (y) #define Max(x, y) (x) < (y) ? (y) : (x) #define E(x) (1 << (x)) #define iabs(x) (x) < 0 ? -(x) : (x) #define OUT(x) printf("%I64d\n", x) #define Read() freopen("data.in", "r", stdin) #define Write() freopen("data.out", "w", stdout); typedef long long LL; const double eps = 1e-8; const double PI = acos(-1.0); const int inf = ~0u>>2; using namespace std; int a[111], n; //a[l] <= tar int bs1(int tar) { int l = -1, r = n, mid; while(r - l > 1) { mid = MID(l, r); if(a[mid] <= tar) l = mid; else r = mid; } return l; } //a[l] < tar int bs2(int tar) { int l = -1, r = n, mid; while(r - l > 1) { mid = MID(l, r); if(a[mid] < tar) l = mid; else r = mid; } return l; } //tar < a[l] int bs3(int tar) { int l = -1, r = n, mid; while(r > l) { mid = MID(l, r); if(a[mid] <= tar) l = mid + 1; else r = mid; } return l; } //tar <= a[l] int bs4(int tar) { int l = -1, r = n, mid; while(r > l) { mid = MID(l, r); if(a[mid] < tar) l = mid + 1; else r = mid; } return l; } int main() { Read(); cin >> n; for(int i = 0; i < n; ++i) cin >> a[i]; sort(a, a + n); for(int i = 0; i < n; ++i) printf("%-3d", i); puts(""); for(int i = 0; i < n; ++i) printf("%-3d", a[i]); puts(""); int fd, num; cin >> num; while(num--) { cin >> fd; cout << endl; cout << "Test " << fd << endl; printf("<= %d : %d\n", fd, bs1(fd)); printf("< %d : %d\n", fd, bs2(fd)); printf("> %d : %d\n", fd, bs3(fd)); printf(">= %d : %d\n", fd, bs4(fd)); } return 0; } /* Test Case: 14 -1 1 0 2 3 3 3 3 3 3 3 4 5 5 4 -1 0 2 3 5 ans: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 -1 0 1 2 3 3 3 3 3 3 3 4 5 5 Test -1 x <= -1 : 0 x < -1 : -1 x > -1 : 1 x >= -1 : -1 Test 0 x <= 0 : 1 x < 0 : 0 x > 0 : 2 x >= 0 : 1 Test 2 x <= 2 : 3 x < 2 : 2 x > 2 : 4 x >= 2 : 3 Test 3 x <= 3 : 10 x < 3 : 3 x > 3 : 11 x >= 3 : 4 */