题目链接: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(线段树剪枝)的更多相关文章

  1. HDU 6356.Glad You Came-线段树(区间更新+剪枝) (2018 Multi-University Training Contest 5 1007)

    6356.Glad You Came 题意就是给你一个随机生成函数,然后从随机函数里确定查询的左右区间以及要更新的val值.然后最后求一下异或和就可以了. 线段树,区间最大值和最小值维护一下,因为数据 ...

  2. 对权值线段树剪枝的误解--以HDU6703为例

    引子 对hdu6703,首先将问题转化为"询问一个排列中大于等于k的值里,下标超过r的最小权值是多少" 我们采用官方题解中的做法:权值线段树+剪枝 对(a[i],i)建线段树,查询 ...

  3. 2018HDU多校五-G题 Glad You Game (线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356 Glad You Game  Steve has an integer array aa of ...

  4. Codeforces 444 C. DZY Loves Colors (线段树+剪枝)

    题目链接:http://codeforces.com/contest/444/problem/C 给定一个长度为n的序列,初始时ai=i,vali=0(1≤i≤n).有两种操作: 将区间[L,R]的值 ...

  5. HDU-6356 Glad You Came (线段树)

    题目链接:Glad You Came 题意:数组有n个数初始为0,m个询问,每个询问给出L R V(按照给定函数生成),将数组的下标L到R的数与V取较大值,最后输出给定的公式结果. 题意:哇~打比赛的 ...

  6. LibreOJ #6190. 序列查询(线段树+剪枝)

    莫队貌似是过不了的,这题是我没见过的科技... 首先区间按右端点排序,然后一个扫描线,扫到某个区间右端点时候计算答案,线段树上节点的信息并不需要明确定义,我们只要求线段树做到当前扫到now时,查询[L ...

  7. HDU4391(线段树+剪枝)

    Paint The Wall Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  8. HDOJ 1754 I Hate It 线段树 第二题

    I Hate It Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就 ...

  9. HDU-6356 Glad You Came 线段树 ST表

    HDU-6356 题意:有m次操作,每次操作通过给定的随机函数生成 l , r , v,使得在 l 到 r 区间内,所有的a[i]变为max(a[i] , v). 最后输出n个a[i]* i的异或和. ...

随机推荐

  1. jclass和jobject的迷惑

    [译]jclass和jobject 2012-09-18 15:02:58|  分类: Android |字号 订阅   jclass和jobject的迷惑第一次使用JNI,实例引用(jobject) ...

  2. 第二次作业——MathExamLv2

    MathExamLv2--林志松 211406285 李明康 211606314 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际 ...

  3. js 联动实现日期选择,一般用作生日

    实现目标:年月日三个select 输入框,以及一个hidden的input,通过js获取input的值,如果有值切是日期格式,年月日select为input中的时间.否则为空.年默认区间段为1900年 ...

  4. 一个几百行代码实现的http服务器tinyhttpd

    /* J. David's webserver */ /* This is a simple webserver. * Created November 1999 by J. David Blacks ...

  5. [由于远程方关闭传输流,身份验证失败]一次处理支付接口bug记录

    因公司系统升级,出现突然有些银行卡不能支付的情况,最开始排查发现是第三方平台接口返回有问题: 返回如下: 从11月7日下午开始一直联系第三方,第三方开始排查,一直说是数据格式有问题. 修改格式以后问题 ...

  6. hdu 6169 gems gems gems【DP】

    题目链接:hdu 6169 gems gems gems Now there are n gems, each of which has its own value. Alice and Bob pl ...

  7. 一切皆文件-文件是对IO的最简抽象

    引用<Linux Kernel Development>原书里面的一句话 in Unix, everything is a file.This simplifies the manipul ...

  8. Linux(十一) 文件目录权限 chmod umask chown

    一 文件目录权限定义 首先我们先认识一下文件目录的权限定义,请看下面ls -l的结果我们发现一个文件或者目录的前面有10位的信息,第一位表示文件类型,大概有一下几种类型:d 表示目录 - 普通文件 b ...

  9. 内存修改之IOS版ce

    开源工具,算法全部在内存中完成,速度比bmsq,igg快,直接搜索0也是无压力.使用c++编写,有一定的扩展能力,可以自己扩展value type和comparator. 项目地址: https:// ...

  10. PAT——1002. 写出这个数

    读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每 ...