Yuan
|
首页
|
发新随笔
|
发新文章
|
联系
|
聚合
|
管理
POJ 2828 经典 逆推即可 ★★★
/**/
/*
题意:一些人,相继插入到pos[i]之后 问最后的情形
解题报告:
本题的算法是利用线段树进行倒推。基本思想是拿一个N个1的序列,从最后一次插入开始倒推。
设当前插入的是Pos Val,那么找到从左边数第Pos + 1个1的位置就是最终需要插入Val的位置,
然后把那个1改成0。
我用树状数组写
*/
#include
<
cstdio
>
#include
<
cstring
>
const
int
MAXN
=
200010
;
int
c[MAXN];
int
pos[MAXN],val[MAXN],ans[MAXN];
int
N;
inline
int
lowbit(
int
x)
{
return
x
&
(
-
x);}
void
dec(
int
p)
{
while
(p
<=
N)
{
c[p]
--
;
p
+=
lowbit(p);
}
}
int
getK(
int
K)
{
int
ans
=
0
,cnt
=
0
;
for
(
int
i
=
18
;i
>=
0
;i
--
)
//
i>=0
{
ans
+=
(
1
<<
i);
if
(ans
>=
N
||
cnt
+
c[ans]
>=
K)ans
-=
(
1
<<
i);
else
cnt
+=
c[ans];
}
return
ans
+
1
;
}
int
main()
{
for
(;
~
scanf(
"
%d
"
,
&
N);)
{
for
(
int
i
=
1
;i
<=
N;i
++
)
{
scanf(
"
%d%d
"
,
&
pos[i],
&
val[i]);
c[i]
=
lowbit(i);
}
for
(
int
i
=
N;i;i
--
)
{
int
pp
=
getK(pos[i]
+
1
);
ans[pp]
=
val[i];
dec(pp);
}
for
(
int
i
=
1
;i
<=
N;i
++
)
printf(
"
%d
"
,ans[i]);
puts(
""
);
}
return
0
;
}
发表于 2010-07-28 23:16
_Yuan
阅读(1023)
评论(0)
编辑
收藏
引用
所属分类:
OJ解题报告
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
SRM 239 HiddenTriangles ★★★★
CodeForces 59E 以边为状态bfs ★★★★
TCO'10 Wildcard Round 500pt CalculationCards
zoj 3462 bitset
SRM 496 PalindromfulString 容斥写法 ★★★★
CodeForces 57D
CodeForces 55D 数位统计 记忆化搜索 跟pre有关 ★★★★
CodeForces 55E Very simple problem
zoj 3455 统计出现次数 判断相等 用l[i]记录字母出现i次的个数 ★★★★
zoj 3354 映射 环 计数 ★★★
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
常用链接
我的随笔
我的评论
我参与的随笔
随笔分类
Dp(27)
(rss)
OJ解题报告(153)
(rss)
OThers(17)
(rss)
TopCoder
(rss)
计算几何(2)
(rss)
枚举(4)
(rss)
数据结构(6)
(rss)
数论(5)
(rss)
搜索(2)
(rss)
贪心(4)
(rss)
图论(10)
(rss)
学习笔记(6)
(rss)
学习总结(19)
(rss)
组合数学(3)
(rss)
Links
Lord Li
Lord zeus
搜索
最新评论
1. re: 双向BFS[未登录]
博主,只用一个队列不就可以解决你第一个问题了吗
--jason
2. re:nvgagkguaioguaiiananfajfofajiosfgoasoajgia[未登录]
cscdcuis
--1
3. re: zoj 3436 逆推 搜
评论内容较长,点击标题查看
--ZH
4. re: zoj 2318 计算几何 spfa判负环
写得好!
--ipqhjjybj
5. re: Poj 1066
@杨书鉴
你写的排序好像不对啊。。。
--小猊