标签:col can change using http hdu names || 数量级
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356
解题心得:
// // ┏┛ ┻━━━━━┛ ┻┓ // ┃ ┃ // ┃ ━ ┃ // ┃ ┳┛ ┗┳ ┃ // ┃ ┃ // ┃ ┻ ┃ // ┃ ┃ // ┗━┓ ┏━━━┛ // ┃ ┃ 神兽保佑 // ┃ ┃ 代码无BUG! // ┃ ┗━━━━━━━━━┓ // ┃ ┣┓ // ┃ ┏┛ // ┗━┓ ┓ ┏━━━┳ ┓ ┏━┛ // ┃ ┫ ┫ ┃ ┫ ┫ // ┗━┻━┛ ┗━┻━┛ #include <bits/stdc++.h> using namespace std; const int maxn = 4e5; const int maxm = 2e7+100; typedef long long ll; long long f[maxm]; int n,m; unsigned int x,y,z,w; struct NODE { ll Min,va; }node[maxn]; void pre() { for(int i=1;i<=3*m;i++) { x = x ^ (x << 11); x = x ^ (x >> 4); x = x ^ (x << 5); x = x ^ (x >> 14); w = x ^ (y ^ z); x = y; y = z; z = w; f[i] = z; } } void init() { scanf("%d%d%u%u%u",&n,&m,&x,&y,&z); pre(); } void pushdown(int root) { if(node[root].va == 0) return ; int chl = root<<1; int chr = root<<1|1; node[chl].va = max(node[chl].va, node[root].va); node[chr].va = max(node[chr].va, node[root].va); node[chl].Min = max(node[chl].Min, node[root].va); node[chr].Min = max(node[chr].Min, node[root].va); node[root].va = 0; } void updata(int root) { int chl = root<<1; int chr = root<<1|1; node[root].Min = min(node[chl].Min, node[chr].Min); } void change(int root,int ql, int qr, int l, int r,ll va) { if(va <= node[root].Min || r < ql || l > qr) return ; if(ql <= l && qr >= r) { node[root].va = max(node[root].va,va); node[root].Min = max(node[root].Min,va); return ; } pushdown(root); int mid = (l + r) >> 1; int chl = root<<1; int chr = root<<1|1; change(chl, ql, qr, l, mid, va); change(chr, ql, qr, mid+1, r, va); updata(root); } ll ans = 0; void get_ans(int root,int l,int r) { if(l == r) { ans ^= 1ll * node[root].Min * l; return ; } pushdown(root); int mid = (l + r) >> 1; int chl = root<<1; int chr = root<<1|1; get_ans(chl, l, mid); get_ans(chr, mid+1, r); } int main() { int t; scanf("%d",&t); while(t--) { memset(node, 0, sizeof(node)); init(); for(int i=1;i<=m;i++) { ll l = min(f[3*i-2]%n+1, f[3*i-1]%n+1); ll r = max(f[3*i-2]%n+1, f[3*i-1]%n+1); ll v = f[3*i]%(1<<30); change(1, l, r, 1, n, v); } ans = 0; get_ans(1, 1, n); printf("%lld\n",ans); } return 0; }
HDOJ:6356-Glad You Came(线段树剪枝)
标签:col can change using http hdu names || 数量级
原文地址:https://www.cnblogs.com/GoldenFingers/p/9462049.html