天天看點

Segment Tree with Pruning

題目

​​題目連結:​​

#include <bits/stdc++.h>
using namespace std;
map<long long,long long>p;
long long slove(long long n,long long k)
{
    if(n<=k) return 1;
    if(p[n]!=0) return p[n];
    if(n%2==0)
    {
        p[n]=2*slove(n/2,k)+1;
    }
    else
    {
        p[n]=slove(n/2,k)+slove(n/2+1,k)+1;
    }
    return p[n];
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        p.clear();
        long long n,k;
        cin>>n>>k;
        cout<<slove(n,k)<<endl;
    }
    return 0;
}      

繼續閱讀