題意是給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...