題目大意:
思路:由於資料範圍只有1e9,乙個數字x開根號次數超過logx之後均為1,所以可以暴力開根號,但是需要剪枝優化,如果子樹的max小於等於1,那麼直接跳過即可。否則遞迴到葉子節點暴力開根號。
1 #include2#define ios ios::sync_with_stdio(false);//
不可再使用scanf printf
3#define max(a, b) ((a) > (b) ? (a) : (b))//
禁用於函式,會超時
4#define min(a, b) ((a) < (b) ? (a) : (b))
5#define mem(a) memset(a, 0, sizeof(a))
6#define dis(x, y, x1, y1) ((x - x1) * (x - x1) + (y - y1) * (y - y1))
7#define mid(l, r) ((l) + ((r) - (l)) / 2)
8#define lson ((o)<<1)
9#define rson ((o)<<1|1)
10#define accepted 0
11#pragma comment(linker, "/stack:102400000,102400000")//
棧外掛程式12
using
namespace
std;
13 inline int
read()
1417
while (ch>='
0'&&ch<='9')
18return x*f;19}
2021 typedef long
long
ll;22
const
int maxn = 100000 + 10;23
const
int mod = 1000000007;//
const引用更快,巨集定義也更快
24const
int inf = 1e9 + 7;25
const
double eps = 1e-6;26
27ll a[maxn];
28struct
node
29tree[maxn<<2
];33
void build(int o, int l, int
r)34
41int m =mid(l, r);
42build(lson, l, m);
43 build(rson, m + 1
, r);
44 tree[o].mmax =max(tree[lson].mmax, tree[rson].mmax);
45 tree[o].sum = tree[lson].sum +tree[rson].sum;46}
47int
ql, qr;
48ll sum;
49void query(int
o)50
56if(ql <=tree[lson].r)query(lson);
57if(qr >=tree[rson].l)query(rson);58}
59void update(int
o)60
67if(ql <=tree[lson].r)update(lson);
68if(qr >=tree[rson].l)update(rson);
69 tree[o].mmax =max(tree[lson].mmax, tree[rson].mmax);
70 tree[o].sum = tree[lson].sum +tree[rson].sum;71}
72int
main()
7389
else
9093}94
return
accepted;
95 }
BZOJ3211 花神遊歷各國
3211 花神遊歷各國 time limit 5 sec memory limit 128 mb submit 1144 solved 416 submit status discuss description input output 每次x 1時,每行乙個整數,表示這次旅行的開心度 sample...
bzoj3211 花神遊歷各國
其實這是一道sb題 哦不其實是兩道2333333 還有3038也是同一題 然而在寫3038的時候由於資料太水直接就a掉了。剛剛拿之前的code交上去就wa啦。不能判斷區間和是否 r l 1因為會出現0 所以要開多乙個東西表示這個區間還有多少個數不會再改變了 每個數可以開方的次數是很小的,就當做是常數...
bzoj 3211 花神遊歷各國
每次x 1時,每行乙個整數,表示這次旅行的開心度 4 1 100 5 5 51 1 2 2 1 2 1 1 2 2 2 3 1 1 4 10111 11對於100 的資料,n 100000,m 200000 data i 非負且小於10 9 對於這個開方,一開始yy了好久,後來發現,10 9的數頂多...