線段樹的平方根hdu4207

2021-09-26 23:13:59 字數 1291 閱讀 3318

這個題很神奇的地方是平方根幾次以後會變成1,然後就不用再計算了,而是直接返回,可以節省時間。

這個題要用到long long,還是直接全部變數都開long long 的好,要不然可能會出錯,還可能tle。

#pragma warning(disable:4996)

#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

struct node

;node tree[100005<<2];

ll a[100005];

ll ans;

void build(ll l, ll r,ll k)

int mid = (l + r)/ 2;

build(l, mid, 2 * k);

build(mid + 1, r, 2 * k + 1);

tree[k].sum = tree[2 * k].sum + tree[2 * k + 1].sum;

}void update(ll l, ll r, ll k)

//if (tree[k].l > r || tree[k].r < l)return;

if (tree[k].l >= l && r >= tree[k].r && ((tree[k].r - tree[k].l + 1) == tree[k].sum))return;

//當這個區間的數全為1的時候,直接返回

if (tree[2 * k].r >= l)update(l, r, 2 * k);

if (tree[2 * k + 1].l <= r)update(l, r, 2 * k + 1);

tree[k].sum = tree[2 * k].sum + tree[2 * k + 1].sum;

}void query(int l, int r, int k)

if (tree[2 * k].r >= l)query(l, r, 2 * k);

if (tree[2 * k + 1].l <= r)query(l, r, 2 * k + 1);

}int main()

//真的搞不懂,題上啥都沒說,但是有t2>t3的情況

if (t1 == 0)update(t2, t3, 1);

else if (t1 == 1)

}printf("\n");//記得輸出格式

} return 0;

}

LintCode x的平方根

x的平方根 實現 int sqrt int n 函式,計算並返回 n 的平方根。樣例 sqrt 3 1 sqrt 4 2 sqrt 5 2 sqrt 10 3 挑戰 o log x solution 如果使用蠻力法來求解的話,肯定是會超時的。因此,我們需要使用牛頓迭代法來求解這問題 牛頓迭代法 對於...

x的平方根

題目三十九 實現int sqrt int x 函式,計算並返回 x 的平方根。您在真實的面試中是否遇到過這個題?yes 樣例sqrt 3 1 sqrt 4 2 sqrt 5 2 sqrt 10 3 挑戰 o log x class solution if i ix return i if i i x...

LeetCode x的平方根

在網上學習了其他人的方法以後,寫了出來,學到了新的方法,在此記錄一下 1,返回整型的時候,可以使用二分法 2 返回double時,可以使用牛頓迭代法,a 求取乙個整數的平方根時,其平方根一定是不大於 n 2 1 所以在 0,n 2 1 這個範圍內求取,如下 int mysqrt int x if m...