zoukankan
html css js c++ java
PKU3264线段树解法
#include
<
stdio.h
>
#include
<
string
.h
>
struct
node
{
node
*
pl,
*
pr;
int
left, right;
int
mxa, min;
}
mem[
100000
];
int
memCount;
int
n, q;
int
mxa, min;
node
*
newNode()
{
node
*
pt
=&
mem[memCount
++
];
pt
->
mxa
=-
1
, pt
->
min
=
1000001
;
return
pt;
}
node
*
buildTree(
int
l,
int
r)
{
node
*
root
=
newNode();
root
->
left
=
l;
root
->
right
=
r;
if
(r
-
l
>=
1
)
{
int
mid
=
(l
+
r)
/
2
;
root
->
pl
=
buildTree(l,mid);
root
->
pr
=
buildTree(mid
+
1
,r);
}
return
root;
}
void
update(node
*
root,
int
i,
int
a)
{
if
(root
->
left
==
i
&&
root
->
right
==
i)
{
root
->
mxa
=
a, root
->
min
=
a;
return
;
}
if
(root
->
min
>
a)
root
->
min
=
a;
if
(root
->
mxa
<
a)
root
->
mxa
=
a;
if
(root
->
pl
->
right
>=
i)
{
update(root
->
pl,i,a);
}
else
{
update(root
->
pr,i,a);
}
}
void
que(node
*
root,
int
i,
int
j)
{
if
(root
->
min
>
min
&&
root
->
mxa
<
mxa)
return
;
if
(root
->
left
==
i
&&
root
->
right
==
j)
{
if
(mxa
<
root
->
mxa)
mxa
=
root
->
mxa;
if
(min
>
root
->
min)
min
=
root
->
min;
return
;
}
if
(root
->
pl
->
right
>=
i)
{
if
(root
->
pl
->
right
>=
j)
que(root
->
pl, i, j);
else
{
int
mid
=
(root
->
left
+
root
->
right)
/
2
;
que(root
->
pl,i,mid);
que(root
->
pr,mid
+
1
,j);
}
}
else
{
que(root
->
pr,i,j);
}
}
int
main()
{
while
(scanf(
"
%d%d
"
,
&
n,
&
q)
==
2
)
{
memCount
=
0
;
node
*
root
=
buildTree(
1
, n);
int
i, a;
for
(i
=
0
;i
<
n;i
++
)
{
scanf(
"
%d
"
,
&
a);
update(root,i
+
1
,a);
}
int
x, y;
for
(i
=
0
;i
<
q;i
++
)
{
scanf(
"
%d%d
"
,
&
x,
&
y);
mxa
=-
1
, min
=
1000001
;
que(root,x, y);
printf(
"
%d\n
"
,mxa
-
min);
}
}
return
0
;
}
查看全文
相关阅读:
Boost智能指针——shared_ptr
Boost.asio的简单使用(timer,thread,io_service类)
ACE线程管理机制
利用boost::asio实现一个简单的服务器框架
【转载】boost::lexical_cast 的使用
BOOST 实用手册(摘录自校友博客)
ACE的安装
Microsoft SQL Server 2000 中的数据转换服务 (DTS)
将 DTS 用于业务智能解决方案的最佳实践
[转]理解“Future”
原文地址:https://www.cnblogs.com/SQL/p/932354.html
最新文章
LearnGallery2Activity.java
Usage of AlertDialog [ AlertDialog.Builder(Activity) ]
1.1破解工具的介绍
禁止U盘拷贝文件
键盘记录器HOOK的应用举例
1.1初识C语言
1.2脱壳的常用思路
SQL计算
ProcesscmdKey KeyDate老是 ProcessKey解决方法
Sql2005 列转行
热门文章
sql2005中运用一条sql语句完成数据导出到Excel中
Button图片加文字
Asp.net GridView 导出Excel (不会整个页面导出且不会乱码)
Config文件简单操作
vs 移除项目代码管理
SQL查询语句获取主键和外键
多行合并列
ACE中TCP通信
ACE自适配通信环境简介
ACE线程管理机制线程的创建与管理
Copyright © 2011-2022 走看看