結果
問題 | No.1742 Binary Indexed Train |
ユーザー |
![]() |
提出日時 | 2021-11-12 22:52:50 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 62 ms / 3,000 ms |
コード長 | 4,097 bytes |
コンパイル時間 | 2,020 ms |
コンパイル使用メモリ | 194,968 KB |
最終ジャッジ日時 | 2025-01-25 17:20:24 |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 32 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define eps 1e-9#define INF 2000000000 // 2e9#define LLINF 2000000000000000000ll // 2e18 (llmax:9e18)#define all(x) (x).begin(), (x).end()#define sq(x) ((x) * (x))#define rep(i, x) for (int i = 0; i < (int)(x); i++)#define drep(i, x) for (int i = ((int)(x)-1); i >= 0; i--)#define popcount __builtin_popcount#define next __next#define prev __prev#ifndef LOCAL#define dmp(...) ;#else#define dmp(...) \cerr << "[ " << #__VA_ARGS__ << " ] : " << dump_str(__VA_ARGS__) << endl#endif// ---------------- Utility ------------------template <class T>bool chmin(T &a, const T &b) {if (a <= b) return false;a = b;return true;}template <class T>bool chmax(T &a, const T &b) {if (a >= b) return false;a = b;return true;}template <class T>using MaxHeap = priority_queue<T>;template <class T>using MinHeap = priority_queue<T, vector<T>, greater<T>>;template <class T>vector<T> vect(int len, T elem) {return vector<T>(len, elem);}// ----------------- Input -------------------template <class T, class U>istream &operator>>(istream &is, pair<T, U> &p) {return is >> p.first >> p.second;}template <class T>istream &operator>>(istream &is, vector<T> &vec) {for (int i = 0; i < vec.size(); i++) is >> vec[i];return is;}// ----------------- Output ------------------template <class T, class U>ostream &operator<<(ostream &os, const pair<T, U> &p) {return os << p.first << ',' << p.second;}template <class T>ostream &operator<<(ostream &os, const vector<T> &v) {for (const T &e : v) os << e << " ";return os;}template <class T>ostream &operator<<(ostream &os, const deque<T> &d) {for (const T &e : d) os << e << " ";return os;}template <class T>ostream &operator<<(ostream &os, const set<T> &s) {os << "{ ";for (const T &e : s) os << e << " ";return os << "}";}template <class T, class U>ostream &operator<<(ostream &os, const map<T, U> &m) {os << "{ ";for (const auto &[key, val] : m) os << "( " << key << " -> " << val << " ) ";return os << "}";}template <class TupleTy, size_t... I>void dump_tuple(ostream &os, const TupleTy t, std::index_sequence<I...>) {(..., (os << (I == 0 ? "" : ",") << std::get<I>(t)));}template <class... Args>ostream &operator<<(ostream &os, const tuple<Args...> &t) {os << "(";dump_tuple(os, t, std::make_index_sequence<sizeof...(Args)>());return os << ")";}void dump_str_rec(ostringstream &) {}template <class Head, class... Tail>void dump_str_rec(ostringstream &oss, Head &&head, Tail &&... tail) {oss << ", " << head;dump_str_rec(oss, forward<Tail>(tail)...);}template <class T, class... U>string dump_str(T &&arg, U &&... args) {ostringstream oss;oss << arg;dump_str_rec(oss, forward<U>(args)...);return oss.str();}// --------------- Fast I/O ------------------void fastio() {cin.tie(0);ios::sync_with_stdio(0);cout << fixed << setprecision(20);}// ------------------ ACL --------------------// #include <atcoder/modint>// constexpr int MOD = 998244353;// constexpr int MOD = 1000000007;// using mint = atcoder::static_modint<MOD>;// ostream &operator<<(ostream &os, const mint &v) {// return os << v.val();// }// ------------ End of template --------------#define endl "\n"using ll = long long;using pii = pair<int, int>;const bool multitest = false;void solve() {int N, Q;cin >> N >> Q;function<ll(ll, ll)> dist = [&](ll S, ll T) -> ll {if (S == 0ll) return (ll)__builtin_popcountll(T);ll k = S & (-S);if (S + k <= T) return dist(S + k, T) + 1ll;assert(S / k == T / k);return dist(S % k, T % k);};for (int i = 0; i < Q; i++) {ll S, T;cin >> S >> T;cout << dist(S, T) << endl;}return;}int main() {fastio();if (!multitest) {solve();} else {cerr << "[Warning] Multi testcase mode on" << endl;int t;cin >> t;while (t--) solve();}return 0;}