热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2018HDU多校联合第五场G题:GladYouGame(线段树优化解法)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《GladYouGame》中,Steve面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356            
Glad You Game 
Steve has an integer array aa of length nn (1-based). He assigned all the elements as zero at the beginning. After that, he made mm operations, each of which is to update an interval of aa with some value. You need to figure out ni=1(iai)⨁i=1n(i⋅ai) after all his operations are finished, where ⨁ means the bitwise exclusive-OR operator. 
In order to avoid huge input data, these operations are encrypted through some particular approach. 
There are three unsigned 32-bit integers X,YX,Y and ZZ which have initial values given by the input. A random number generator function is described as following, where ∧means the bitwise exclusive-OR operator, <<<< means the bitwise left shift operator and >>>> means the bitwise right shift operator. Note that function would change the values of X,YX,Y and ZZ after calling. 

1 #include
2 using namespace std;
3 typedef long long LL;
4 const int maxn&#61;1e5&#43;10;
5 int n,m,T;
6 unsigned int X,Y,Z;
7
8 struct Node{
9 int l,r,maxnum,minnum,tag;
10 } tree[maxn<<2];
11
12 unsigned int functions()
13 {
14 X&#61;X^(X<<11);
15 X&#61;X^(X>>4);
16 X&#61;X^(X<<5);
17 X&#61;X^(X>>14);
18 unsigned int w&#61;X^(Y^Z);
19 X&#61;Y; Y&#61;Z; Z&#61;w;
20 return Z;
21 }
22
23 void build(int pos,int l,int r)
24 {
25 tree[pos].l&#61;l,tree[pos].r&#61;r,tree[pos].tag&#61;-1;
26 if(l&#61;&#61;r)
27 {
28 tree[pos].maxnum&#61;0;
29 tree[pos].minnum&#61;0;
30 return ;
31 }
32 int mid&#61;(tree[pos].l&#43;tree[pos].r)>>1;
33 build(pos<<1,l,mid);
34 build(pos<<1|1,mid&#43;1,r);
35 tree[pos].maxnum&#61;max(tree[pos<<1].maxnum,tree[pos<<1|1].maxnum);
36 tree[pos].minnum&#61;min(tree[pos<<1].minnum,tree[pos<<1|1].minnum);
37 }
38
39 void pushup(int pos)
40 {
41 tree[pos].maxnum&#61;max(tree[pos<<1].maxnum,tree[pos<<1|1].maxnum);
42 tree[pos].minnum&#61;min(tree[pos<<1].minnum,tree[pos<<1|1].minnum);
43 }
44
45 void pushdown(int pos)
46 {
47 tree[pos<<1].maxnum&#61;max(tree[pos<<1].maxnum,tree[pos].tag);
48 tree[pos<<1|1].maxnum&#61;max(tree[pos<<1|1].maxnum,tree[pos].tag);
49 tree[pos<<1].minnum&#61;max(tree[pos<<1].minnum,tree[pos].tag);
50 tree[pos<<1|1].minnum&#61;max(tree[pos<<1|1].minnum,tree[pos].tag);
51 tree[pos<<1].tag&#61;max(tree[pos<<1].tag,tree[pos].tag);
52 tree[pos<<1|1].tag&#61;max(tree[pos<<1|1].tag,tree[pos].tag);
53 tree[pos].tag&#61;-1;
54 }
55
56 void update(int pos,int l,int r,int val)
57 {
58 if(tree[pos].l&#61;&#61;tree[pos].r)
59 {
60 tree[pos].maxnum&#61;max(tree[pos].maxnum,val);
61 tree[pos].minnum&#61;max(tree[pos].minnum,val);
62 return ;
63 }
64 if(tree[pos].l>&#61;l&&tree[pos].r<&#61;r)
65 {
66 if(tree[pos].maxnum<&#61;val)
67 {
68 tree[pos].maxnum&#61;tree[pos].minnum&#61;val;
69 tree[pos].tag&#61;max(tree[pos].tag,val);
70 return ;
71 }
72 }
73 if(tree[pos].minnum>&#61;val) return ;
74
75 if(tree[pos].tag!&#61;-1) pushdown(pos);
76 int mid&#61;(tree[pos].l&#43;tree[pos].r)>>1;
77 if(r<&#61;mid) update(pos<<1,l,r,val);
78 else if(l>&#61;mid&#43;1) update(pos<<1|1,l,r,val);
79 else update(pos<<1,l,mid,val),update(pos<<1|1,mid&#43;1,r,val);
80 pushup(pos);
81 }
82
83 int query(int pos,int k)
84 {
85 if(tree[pos].l&#61;&#61;tree[pos].r&&tree[pos].l&#61;&#61;k) return tree[pos].maxnum;
86 int mid&#61;(tree[pos].l&#43;tree[pos].r)>>1;
87 if(tree[pos].tag!&#61;-1) pushdown(pos);
88 if(k<&#61;mid) return query(pos<<1,k);
89 else return query(pos<<1|1,k);
90 }
91
92 int main()
93 {
94 ios::sync_with_stdio(false);
95 cin.tie(0);
96 cin>>T;
97 while(T--)
98 {
99 LL ans&#61;0;
100 cin>>n>>m>>X>>Y>>Z;
101 build(1,1,n);
102 for(int i&#61;1;i<&#61;m;i&#43;&#43;)
103 {
104 int l&#61;functions()%n&#43;1;
105 int r&#61;functions()%n&#43;1;
106 int v&#61;functions()%(1<<30);
107 if(l>r) swap(l,r);
108 update(1,l,r,v);
109 }
110 for(int i&#61;1;i<&#61;n;i&#43;&#43;) ans^&#61;1ll*i*query(1,i);
111 cout<endl;
112 }
113
114 return 0;
115 }

View Code

 

转:https://www.cnblogs.com/songorz/p/9482441.html



推荐阅读
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • CSS Border 属性:solid 边框的使用详解
    本文详细介绍了如何在CSS中使用solid边框属性,包括其基本语法、应用场景及高级技巧,适合初学者和进阶用户参考。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • publicclassBindActionextendsActionSupport{privateStringproString;privateStringcitString; ... [详细]
  • CRZ.im:一款极简的网址缩短服务及其安装指南
    本文介绍了一款名为CRZ.im的极简网址缩短服务,该服务采用PHP和SQLite开发,体积小巧,约10KB。本文还提供了详细的安装步骤,包括环境配置、域名解析及Nginx伪静态设置。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • Jenkins API当前未直接提供获取任务构建队列长度的功能,因此需要通过解析HTML页面来间接实现这一需求。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
author-avatar
全哥-广州仔1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有