Problem p03506 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <algorithm>
#include <array>
#include <bitset>
#include <chrono>
#include <cmath>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <map>
#include <queue>
#include <random>
#include <set>
#include <string>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <vector>
using namespace std;
typedef long long int llint;
typedef long double lldo;
#define mp make_pair
#define mt make_tuple
#define pub push_back
#define puf push_front
#define pob pop_back
#define pof pop_front
#define fir first
#define sec second
#define res resize
#define ins insert
#define era erase
#define RE return 0
// ios::sync_with_stdio(false);
// std::cin.tie(0);
//<< setprecision(20)
const int mod = 1e9 + 7;
const llint big = 1e15 + 100;
const long double pai = 3.141592653589793238462643383279502884197;
const long double ena = 2.71828182845904523536;
const long double eps = 1e-7;
template <class T, class U> void mineq(T &a, U b) {
  if (a > b) {
    a = b;
  }
}
template <class T, class U> void maxeq(T &a, U b) {
  if (a < b) {
    a = b;
  }
}
template <class T> void soun(T &ar) {
  sort(ar.begin(), ar.end());
  ar.erase(unique(ar.begin(), ar.end()), ar.end());
}
int main(void) {
  llint n, q;
  cin >> n >> q;
  while (q--) { // 完全なので余裕
    // 親は(ter-2)/n +1
    // 深さを求めない実装
    int v, w;
    cin >> v >> w;
    while (v != w) {
      if (v > w) {
        swap(v, w);
      }
      w = (w - 2) / n + 1;
    }
    cout << v << endl;
  }
  RE;
}

Fixed submission:
#include <algorithm>
#include <array>
#include <bitset>
#include <chrono>
#include <cmath>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <map>
#include <queue>
#include <random>
#include <set>
#include <string>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <vector>
using namespace std;
typedef long long int llint;
typedef long double lldo;
#define mp make_pair
#define mt make_tuple
#define pub push_back
#define puf push_front
#define pob pop_back
#define pof pop_front
#define fir first
#define sec second
#define res resize
#define ins insert
#define era erase
#define RE return 0
// ios::sync_with_stdio(false);
// std::cin.tie(0);
//<< setprecision(20)
const int mod = 1e9 + 7;
const llint big = 1e15 + 100;
const long double pai = 3.141592653589793238462643383279502884197;
const long double ena = 2.71828182845904523536;
const long double eps = 1e-7;
template <class T, class U> void mineq(T &a, U b) {
  if (a > b) {
    a = b;
  }
}
template <class T, class U> void maxeq(T &a, U b) {
  if (a < b) {
    a = b;
  }
}
template <class T> void soun(T &ar) {
  sort(ar.begin(), ar.end());
  ar.erase(unique(ar.begin(), ar.end()), ar.end());
}
int main(void) {
  llint n, q;
  cin >> n >> q;
  while (q--) { // 完全なので余裕
    // 親は(ter-2)/n +1
    // 深さを求めない実装
    int v, w;
    cin >> v >> w;
    if (n == 1) {
      cout << min(v, w) << endl;
      continue;
    }
    while (v != w) {
      if (v > w) {
        swap(v, w);
      }
      w = (w - 2) / n + 1;
    }
    cout << v << endl;
  }
  RE;
}