1064
#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> #include <math.h> #include <limits.h> using namespace std; // Datatypes typedef vector<int> vi; typedef vector<string> vs; typedef vector<vi> vvi; typedef pair<int,int> ii; typedef long long ll; typedef long double ld; // Define #define sz(a) int((a).size()) #define pb push_back #define all(c) (c).begin(),(c).end() #define present(c,x) ((c).find(x) != (c).end()) #define cpresent(c,x) (find(all(c),x) != (c).end()) #define FOR(_i,_n) for(int (_i) = 0; (_i) < (_n); (_i)++) #define mp make_pair #define MAXN 10000 int A[MAXN]; int N; int BinarySearch(int x) { int p, q, i, L; p = 0; /* Left border of the search */ q = N-1; /* Right border of the search */ L = 0; /* Comparison counter */ while (p <= q) { i = (p + q) / 2; ++L; if (A[i] == x) { return L; } if (x < A[i]) q = i - 1; else p = i + 1; } } int main(void) { int k,l; int a,b; vector<ii> v; cin >> k >> l; FOR(i,MAXN) A[i] = i; a = -1; b = -1; for(int i = k+1; i <= MAXN; i++) { N = i; if(BinarySearch(k) == l) { if(a == -1) a = i; else b = i; } else { if(a != -1) { if(b == -1) b = a; v.pb(mp(a,b)); a = b = -1; } } } if(a != -1) { if(b == -1) b = a; v.pb(mp(a,b)); a = b = -1; } cout << sz(v) << endl; FOR(i,sz(v)) { cout << v[i].first << " " << v[i].second << endl; } return 0; }
page revision: 0, last edited: 09 May 2007 07:24