HDU5239 線段樹,找規律,快速乘法

2021-07-05 20:16:46 字數 1152 閱讀 3755

題意是給n個數,m個詢問,每次輸出之前的值加上此時詢問區間的值,然後區間的數字都平方。

坑點是模數很大,需要把平方轉化成類似快速冪的加法。

#include using namespace std;

#define maxn 111111

#define pl c<<1

#define pr (c<<1)|1

#define lson tree[c].l,tree[c].mid,c<<1

#define rson tree[c].mid+1,tree[c].r,(c<<1)|1

const unsigned long long mod = 9223372034707292160;

int n, q;

struct node tree[maxn<<4];

unsigned long long a[maxn];

unsigned long long mul (unsigned long long a, unsigned long long b)

void pushup (int c)

void build_tree (int l, int r, int c)

build_tree (lson);

build_tree (rson);

pushup (c);

}void update (int l, int r, int c)

update (lson);

update (rson);

pushup (c);

}unsigned long long query (int l, int r, int c, int x, int y)

else if (tree[c].mid >= y)

else if (tree[c].mid < x)

else

ans %= mod;

pushup (c);

return ans;

}int main ()

build_tree (1, n, 1);

int x, y;

unsigned long long ans = 0;

while (q--)

}return 0;

}

hdu5239Doom 線段樹 找規律

給出n個資料 對於每次 l,r 操作,s加上 l,r 區間的所有數 之和,並且將 l,r 區間的所有數 都平方 輸出s 9223372034707292160 打表可以發現對於每個數在做一定操作 後其值一定不變 所以只需要維護乙個標記就行 include include include using ...

hdu 預處理 線段樹)

給n個數,m個詢問,問任意區間內與其它數互質的數有多少個 比如3個數1 2 4,詢問 1,3 那麼答案是1 千萬要記住,這樣的題目,如果你不轉變下,使勁往線段樹想 雖然轉變之後,也說要用到線段樹,但是維護的東西不同了 那麼會發現這樣的題目,區間與區間之間是無法傳遞資訊的,區間與區間是無法傳遞資訊的,...

初步線段樹 hdu1166

include include includeusing namespace std define max 50000 struct node node maintree 4 max void settree int n,int l,int r int main printf case d n tt...