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
;
}
查看全文
相关阅读:
gulp通过http-proxy-middleware开启反向代理,实现跨域
一些我常用的css 或者 js
四舍五入
生成 SSH 公钥
对象转为数组 用lodash
廖雪峰的官方网站
window对象
字符串
简单得日期
LeetCode 113. Path Sum II 20170705 部分之前做了没写的题目
原文地址:https://www.cnblogs.com/SQL/p/926666.html
最新文章
Java我来了
机器学习5 线性回归算法
机器学习 4 K均值算法
机器学习3 K均值算法
机器学习概论 2
1. 机器学习概述
编译原理15 语法制导的语义翻译
编译原理 14 算符优先分析
编译原理13 自下而上语法分析
编译原理12 递归下降语法分析
热门文章
编译原理11 LL(1)文法的判断,递归下降分析程序
关于图片上传实现方案
关于阮一峰js继承文章阅读笔记
关于JQ分页插件的封装
关于常见的一个问题,涉及到闭包、作用域等问题,节点列表点击打印对应索引的问题
seo搜索引擎优化相关
关于flex.js
关于ajax的基础知识
关于css中盒模型随记
git提交随笔
Copyright © 2011-2022 走看看