HDOJ:6356-Glad You Came(线段树剪枝)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356
解题心得:
- 现在深深的知道了算法复杂度的重要了,这个题算复杂度的时候还要把一些常数也算出来,不然常数太大也容易凉凉阿。这个题的m的数量级比n的还要大一位,如果用离线对询问排序直接就TLE了。
- 其实这个题就是一个区间更新的线段树,只不过记录一下最小值,如果最小值大于将要更新的值就直接跳出,在线段树上剪枝。然而很迷的是在把m的内存开小了,开成n了居然不RE而是TLE,坑死了。
//
// ┏┛ ┻━━━━━┛ ┻┓
// ┃ ┃
// ┃ ━ ┃
// ┃ ┳┛ ┗┳ ┃
// ┃ ┃
// ┃ ┻ ┃
// ┃ ┃
// ┗━┓ ┏━━━┛
// ┃ ┃ 神兽保佑
// ┃ ┃ 代码无BUG!
// ┃ ┗━━━━━━━━━┓
// ┃ ┣┓
// ┃ ┏┛
// ┗━┓ ┓ ┏━━━┳ ┓ ┏━┛
// ┃ ┫ ┫ ┃ ┫ ┫
// ┗━┻━┛ ┗━┻━┛
#include <bits/stdc++.h>
using namespace std;
const int maxn = 4e5;
const int maxm = 2e7+;
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=;i<=*m;i++) {
x = x ^ (x << );
x = x ^ (x >> );
x = x ^ (x << );
x = x ^ (x >> );
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 == )
return ;
int chl = root<<;
int chr = root<<|;
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 = ;
} void updata(int root) {
int chl = root<<;
int chr = root<<|;
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) >> ;
int chl = root<<;
int chr = root<<|; change(chl, ql, qr, l, mid, va);
change(chr, ql, qr, mid+, r, va);
updata(root);
} ll ans = ; 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) >> ;
int chl = root<<;
int chr = root<<|;
get_ans(chl, l, mid);
get_ans(chr, mid+, r);
} int main() {
int t;
scanf("%d",&t);
while(t--) {
memset(node, , sizeof(node));
init();
for(int i=;i<=m;i++) {
ll l = min(f[*i-]%n+, f[*i-]%n+);
ll r = max(f[*i-]%n+, f[*i-]%n+);
ll v = f[*i]%(<<);
change(, l, r, , n, v);
}
ans = ;
get_ans(, , n);
printf("%lld\n",ans);
}
return ;
}
HDOJ:6356-Glad You Came(线段树剪枝)的更多相关文章
- HDU 6356.Glad You Came-线段树(区间更新+剪枝) (2018 Multi-University Training Contest 5 1007)
6356.Glad You Came 题意就是给你一个随机生成函数,然后从随机函数里确定查询的左右区间以及要更新的val值.然后最后求一下异或和就可以了. 线段树,区间最大值和最小值维护一下,因为数据 ...
- 对权值线段树剪枝的误解--以HDU6703为例
引子 对hdu6703,首先将问题转化为"询问一个排列中大于等于k的值里,下标超过r的最小权值是多少" 我们采用官方题解中的做法:权值线段树+剪枝 对(a[i],i)建线段树,查询 ...
- 2018HDU多校五-G题 Glad You Game (线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356 Glad You Game Steve has an integer array aa of ...
- Codeforces 444 C. DZY Loves Colors (线段树+剪枝)
题目链接:http://codeforces.com/contest/444/problem/C 给定一个长度为n的序列,初始时ai=i,vali=0(1≤i≤n).有两种操作: 将区间[L,R]的值 ...
- HDU-6356 Glad You Came (线段树)
题目链接:Glad You Came 题意:数组有n个数初始为0,m个询问,每个询问给出L R V(按照给定函数生成),将数组的下标L到R的数与V取较大值,最后输出给定的公式结果. 题意:哇~打比赛的 ...
- LibreOJ #6190. 序列查询(线段树+剪枝)
莫队貌似是过不了的,这题是我没见过的科技... 首先区间按右端点排序,然后一个扫描线,扫到某个区间右端点时候计算答案,线段树上节点的信息并不需要明确定义,我们只要求线段树做到当前扫到now时,查询[L ...
- HDU4391(线段树+剪枝)
Paint The Wall Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDOJ 1754 I Hate It 线段树 第二题
I Hate It Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就 ...
- HDU-6356 Glad You Came 线段树 ST表
HDU-6356 题意:有m次操作,每次操作通过给定的随机函数生成 l , r , v,使得在 l 到 r 区间内,所有的a[i]变为max(a[i] , v). 最后输出n个a[i]* i的异或和. ...
随机推荐
- DOS下常用命令
0,想进入某个驱动器,直接输入盘符即可.如:“d:”1,CD--进入指定目录 2,cls--清除显示器屏幕上的内容,使DOS提示符到屏幕左上角. 3,time--显示和设置DOS的系统时间 4,dir ...
- January 27 2017 Week 4 Friday
Procrastination is the thief of time. 拖延是时光之贼. Procrastination is the thief of time, besides, it is ...
- vue记录
vue项目中使用默认图片代替异常图片 第一种方法 <img onerror="javascript:this.src='../../static/custom.png';" ...
- vim c++插件clang_complete
地址 http://www.vim.org/scripts/script.php?script_id=3302 以后应该会用到的,先记下:需要安装clang编译器.
- hbase hfilev2
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u014393917/article/details/25508809 HFileV2文件 HFile ...
- 实用技巧:利用Excel实现客户档案的统一管理
背景: 一个朋友新开了家门市,生意不错,客源旺盛. 有次我们喝茶时,他透露一个问题,就是客户的档案管理很不理想,都是纸面的,很容易丢失,也不方便查找. 我自诩混迹IT界多年,当然要替好友解决这个小麻烦 ...
- PHP-------MySQLi 的函数
MySQLi 的函数 在数据库中找到一张是自增长的科目表表就可以, Code主键值是自增长的,name是varchar类型的. 如果想往科目表里添加一条数据,是自增长列的表中添加数据,添加完之后,取添 ...
- 检查BUG插件 代码规范(Findbugs)插件 安装以及使用(idea)
使用findbugs进行检查代码规范 Findbugs很多人都并不陌生,Eclipse中有插件可以帮助查找代码中隐藏的bug,IDEA中也有这款插件.这个插件可以帮助我们查找隐藏的bug,比较重要的功 ...
- 【luogu P1351 联合权值】 题解
题目链接:https://www.luogu.org/problemnew/show/P1351 做了些提高组的题,不得不说虽然NOIP考察的知识点虽然基本上都学过,但是做起题来还是需要动脑子的. 题 ...
- 一个jquery ajax例子
上次搞了个jquery的AutoComplete效果,感觉很久没写jquery了,趁热打铁,再找点东西练练手.这不,看了一下jquery手册,顺便写了一个小例子,源码我直接贴上来了. 1.新建一个 ...