zoukankan
html css js c++ java
线段树521
最近线段树狂写中 争取以后啥都不看就能写出来
#include
<
stdio.h
>
#include
<
string
.h
>
struct
node
{
node
*
pl,
*
pr;
int
left, right;
int
color;
int
colCount;
int
cl, cr;
}
mem[
200020
];
int
memCount;
int
Col[
31
];
int
ColCnt;
int
result;
node
*
newNode()
{
node
*
pt
=
&
mem[memCount
++
];
pt
->
color
=
pt
->
colCount
=
pt
->
cr
=
pt
->
cl
=
1
;
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, r);
}
return
root;
}
void
color(node
*
root,
int
c)
{
root
->
colCount
=
1
;
root
->
color
=
root
->
cl
=
root
->
cr
=
c;
}
void
update(node
*
root,
int
l,
int
r,
int
c)
{
if
(root
->
left
==
l
&&
root
->
right
==
r)
{
color(root, c);
return
;
}
if
(root
->
colCount
==
1
)
{
color(root
->
pl,root
->
color);
color(root
->
pr,root
->
color);
}
if
(root
->
colCount
==
1
&&
root
->
color
==
c)
return
;
root
->
colCount
=
2
;
if
(root
->
pl
->
right
>
l)
{
if
(root
->
pl
->
right
>=
r)
update(root
->
pl,l,r,c);
else
{
int
mid
=
(root
->
left
+
root
->
right)
/
2
;
update(root
->
pl,l,mid,c);
update(root
->
pr,mid,r,c);
}
}
else
{
update(root
->
pr,l,r,c);
}
root
->
cl
=
root
->
pl
->
cl;
root
->
cr
=
root
->
pr
->
cr;
}
void
ques(node
*
root,
int
l,
int
r)
{
if
(root
->
colCount
==
1
)
{
Col[ColCnt
++
]
=
root
->
color;
return
;
}
if
(root
->
right
-
root
->
left
<=
1
)
return
;
if
(root
->
pl
->
right
>
l)
{
if
(root
->
pl
->
right
>=
r)
ques(root
->
pl,l,r);
else
{
int
mid
=
(root
->
left
+
root
->
right)
/
2
;
ques(root
->
pl,l,mid);
ques(root
->
pr,mid,r);
}
}
else
{
ques(root
->
pr,l,r);
}
}
void
clean()
{
int
i, j;
for
(i
=
1
; i
<=
30
; i
++
)
for
(j
=
0
; j
<
ColCnt; j
++
)
{
if
(i
==
Col[j])
{
result
++
;
break
;
}
}
}
int
main()
{
int
l, t, o;
while
(scanf(
"
%d%d%d
"
,
&
l,
&
t,
&
o)
==
3
)
{
memCount
=
0
;
node
*
root
=
buildTree(
0
, l);
int
i;
char
op;
int
l, r, c;
for
(i
=
0
; i
<
o; i
++
)
{
scanf(
"
%s
"
,
&
op);
if
(op
==
'
C
'
)
{
scanf(
"
%d%d%d
"
,
&
l,
&
r,
&
c);
if
(l
<=
r)
update(root,l
-
1
,r,c);
else
update(root,r
-
1
,l,c);
}
else
{
ColCnt
=
0
;
result
=
0
;
memset(Col,
0
,
sizeof
(Col));
scanf(
"
%d%d
"
,
&
l,
&
r);
if
(l
<=
r)
ques(root,l
-
1
, r);
else
ques(root,r
-
1
,l);
clean();
printf(
"
%d\n
"
, result);
}
}
}
return
0
;
}
查看全文
相关阅读:
(转)C#中的那些全局异常捕获
mysql 5.7 MGR
mysql 5.7 MGR
perl 获取响应头
python 获取响应头
研究生开咖啡厅,年盈利15万,欲打造重庆咖啡文化
女学生经营二手服装租赁,年营业额突破300万
在校学生看中餐饮外送行业,企业估值500亿
导演跨界跳入椰子水“新泳池”,一举占领椰子产品市场
在校女学生,掌管27家卤味连锁店
原文地址:https://www.cnblogs.com/SQL/p/926666.html
最新文章
系统集成项目管理工程师考试要求
系统集成项目管理工程师考试要求
系统集成项目管理工程师考试要求
大学生街头摆摊卖烧饼,月入过万不是梦
患难夫妻一起卖蛋挞,生活有滋有味
洗碗工逆袭为料理店店长,如今个人资产达百万元
海南残疾大学生回乡创业,为残疾人插上梦想的翅膀
90后男子因为喜欢收集,大学开始创业卖珠宝,年入百万不成问题
让华尔街疯狂的哈佛天才,这个人有什么本事
浙大学生传奇创业,月营业额达60万
热门文章
JDBC连接执行 MySQL 存储过程报权限错误:User does not have access to metadata required to determine stored procedur
Oracle 18c新特性:Schema-Only 帐号提升应用管理安全性
嘉年华专访 | 国际上智能运维研究
vmware centos7系统虚拟机复制到其他电脑后不能联网问题解决
vmware centos7系统虚拟机复制到其他电脑后不能联网问题解决
vmware centos7系统虚拟机复制到其他电脑后不能联网问题解决
vmware centos7系统虚拟机复制到其他电脑后不能联网问题解决
(转)C#中的那些全局异常捕获
(转)C#中的那些全局异常捕获
(转)C#中的那些全局异常捕获
Copyright © 2011-2022 走看看