Advertisement
Guest User

Untitled

a guest
May 26th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <unordered_map>
  4. #include <vector>
  5. #include<cmath>
  6. using namespace std;
  7.  
  8. /*const int N = 100000;
  9. typedef long long ll;
  10. struct dt {
  11.     unordered_map <ll, bool> m;
  12.     int add;
  13. };
  14. int n;
  15. vector<ll> a;
  16. vector<dt> t;
  17. void build(vector<ll> &a, int v, int tl, int tr)
  18. {
  19.     if (tl == tr) {
  20.         t[v].m[a[tl]] = true;
  21.         t[v].add = 0;
  22.     }  
  23.     else {
  24.         int tm = (tl + tr) >> 1;
  25.         build(a, v << 1, tl, tm);
  26.         build(a, (v << 1) + 1, tm + 1, tr);
  27.         t[v] = t[v << 1];
  28.         for (auto i : t[(v << 1) + 1].m)
  29.             t[v].m[i.first] += i.second;
  30.     }
  31. }
  32.  
  33. void update(int pos, int new_val)
  34. {
  35.     int v = 1;
  36.     for (int tl = 0, tr = n - 1, tm; v < n << 2 && tl != tr;)
  37.     {
  38.         tm = (tl + tr) >> 1;
  39.         if (pos <= tm) {
  40.             v <<= 1;
  41.             tr = tm;
  42.         }
  43.         else {
  44.             v = (v << 1) + 1;
  45.             tl = tm + 1;
  46.         }
  47.     }
  48.     ll old_val = t[v].m.begin()->first;
  49.     t[v].m.clear();
  50.     t[v].m[new_val] = 1;
  51.     for (v >>= 1; v > 0; v >>= 1) {
  52.         t[v][old_val]--;
  53.         if (t[v][old_val] == 0)
  54.             t[v].erase(old_val);
  55.         t[v][new_val]++;
  56.     }
  57. }
  58.  
  59. int freq(int v, int tl, int tr, int l, int r, int x)
  60. {
  61.     if (l > r)
  62.         return 0;
  63.     if (l == tl && r == tr) {
  64.         if (t[v][x] == 0) {
  65.             t[v].erase(x);
  66.             return 0;
  67.         }
  68.         return t[v][x];
  69.     }
  70.     else {
  71.         int tm = (tl + tr) >> 1;
  72.         return freq(v << 1, tl, tm, l, min(r, tm), x)
  73.             + freq((v << 1) + 1, tm + 1, tr, max(l, tm + 1), r, x);
  74.     }
  75. }
  76. int gcd(int a, int b) {
  77.     if (b == 0)
  78.         return a;
  79.     if (a == 0)
  80.         return b;
  81.     while (b) {
  82.         a %= b;
  83.         swap(a, b);
  84.     }
  85.     return a;
  86. }
  87. */
  88. typedef long long ll;
  89. unordered_map<ll, ll> memo;
  90. ll f(ll n, ll m)
  91. {
  92.     ll res;
  93.     if (memo.count(n) == 1)
  94.         return memo[n];
  95.     if (n % 2 == 1)
  96.         res = f(n >> 1, m) * f((n >> 1) + 1, m) << 1 % m;
  97.     else
  98.         res = f(n >> 1, m) * f(n >> 1, m) % m;
  99.     return res;
  100. }
  101.  
  102. int main()
  103. {
  104.     ios_base::sync_with_stdio(false);
  105.     long long n;
  106.     memo[1] = 1;
  107.     cin >> n;
  108.     cout << f(n, (ll)1e+9 + 7LL) << endl;
  109.     return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement