热门标签 | 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



推荐阅读
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • JSOI2010 蔬菜庆典:树结构中的无限大权值问题
    本文探讨了 JSOI2010 的蔬菜庆典问题,主要关注如何处理非根非叶子节点的无限大权值情况。通过分析根节点及其子树的特性,提出了有效的解决方案,并详细解释了算法的实现过程。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 二叉树的链表实现
    本文介绍了一种使用链表结构表示二叉树的方法。通过定义节点结构和相关操作函数,可以方便地创建、插入和遍历二叉树。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 本文介绍了如何通过ARM编译器组件重定向标准C运行时库的I/O函数,以适应不同的硬件平台。原文链接:https://www.keil.com/pack/doc/compiler/RetargetIO/html/retarget_overview.html ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文介绍了如何通过Java代码计算一个整数的位数,并展示了多个基础编程示例,包括求和、平均分计算、条件判断等。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • 深入浅出TensorFlow数据读写机制
    本文详细介绍TensorFlow中的数据读写操作,包括TFRecord文件的创建与读取,以及数据集(dataset)的相关概念和使用方法。 ... [详细]
  • 本题要求计算给定两个正整数a和b时,2的-a次方与2的-b次方之和,并将结果以最简分数形式表示。输入包括多组测试数据,每组数据包含两个在2到20范围内的整数。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • CSS高级技巧:动态高亮当前页面导航
    本文介绍了如何使用CSS实现网站导航栏中当前页面的高亮显示,提升用户体验。通过为每个页面的body元素添加特定ID,并结合导航项的类名,可以轻松实现这一功能。 ... [详细]
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社区 版权所有