【BZOJ2527】Meteors(整体二分)
题意:
这个星球经常会下陨石雨。BIU已经预测了接下来K场陨石雨的情况。
BIU的第i个成员国希望能够收集Pi单位的陨石样本。你的任务是判断对于每个国家,它需要在第几次陨石雨之后,才能收集足够的陨石。
输入:
第一行是两个数N,M。
第二行有M个数,第i个数Oi表示第i段轨道上有第Oi个国家的太空站。
第三行有N个数,第i个数Pi表示第i个国家希望收集的陨石数量。
第四行有一个数K,表示BIU预测了接下来的K场陨石雨。
接下来K行,每行有三个数Li,Ri,Ai,表示第K场陨石雨的发生地点在从Li顺时针到Ri的区间中(如果Li<=Ri,就是Li,Li+1,...,Ri,否则就是Ri,Ri+1,...,m-1,m,1,...,Li),向区间中的每个太空站提供Ai单位的陨石样本。
输出:
N行。第i行的数Wi表示第i个国家在第Wi波陨石雨之后能够收集到足够的陨石样本。如果到第K波结束后仍然收集不到,输出NIE。
var s1,s2:array[..]of extended;
t:array[..]of longint;
c,q:array[..]of record
l,r,op,t:longint;
a:int64;
s:extended;
end;
b:array[..]of extended;
head,vet,next,ans,flag:array[..]of longint;
n,m,i,k,tot,x,time:longint; procedure add(x:longint;y:extended);
var i:longint;
begin
i:=x;
while i<=m do
begin
if t[i]<>time then
begin
s1[i]:=; s2[i]:=; t[i]:=time;
end;
s1[i]:=s1[i]+y;
s2[i]:=s2[i]+y*x;
i:=i+i and (-i);
end;
end; function query(x:longint):extended;
var i:longint;
begin
query:=; i:=x;
while i> do
begin
if t[i]=time then query:=query+s1[i]*(x+)-s2[i];
i:=i-i and (-i);
end;
end; procedure solve(x,y,l,r:longint);
var i,j,mid,pre,now,u,e,v:longint;
tmp:extended;
begin
if l>r then exit;
if l=r then
begin
for i:=x to y do
if c[i].op= then ans[c[i].a]:=l;
exit;
end;
mid:=(l+r)>>;
pre:=x; now:=x; inc(time);
for i:=x to y do
if c[i].op= then
begin
if c[i].t<=mid then
begin
if c[i].l>c[i].r then
begin
add(c[i].l,c[i].a);
add(,c[i].a);
add(c[i].r+,-c[i].a);
end
else
begin
add(c[i].l,c[i].a);
add(c[i].r+,-c[i].a);
end;
flag[i]:=;
inc(now);
end
else flag[i]:=;
end;
for i:=x to y do
if c[i].op= then
begin
u:=c[i].a; tmp:=;
e:=head[u];
while e<> do
begin
v:=vet[e];
tmp:=tmp+query(v)-query(v-);
if tmp>=c[i].s then break;
e:=next[e];
end;
if tmp>=c[i].s then
begin
inc(now); flag[i]:=;
end
else
begin
flag[i]:=; c[i].s:=c[i].s-tmp;
end;
end; for i:=x to y do
if flag[i]= then
begin
q[now]:=c[i]; inc(now);
end
else
begin
q[pre]:=c[i]; inc(pre);
end;
for i:=x to y do c[i]:=q[i];
solve(x,pre-,l,mid);
solve(pre,y,mid+,r);
end; procedure add(a,b:longint);
begin
inc(tot);
next[tot]:=head[a];
vet[tot]:=b;
head[a]:=tot;
end; begin read(n,m);
for i:= to m do
begin
read(x);
add(x,i);
end;
for i:= to n do read(b[i]);
read(k);
for i:= to k do
begin
read(c[i].l,c[i].r,c[i].a);
c[i].op:=; c[i].t:=i;
end;
for i:= to n do
begin
c[i+k].op:=;
c[i+k].a:=i; c[i+k].s:=b[i];
end; solve(,k+n,,k+);
for i:= to n do
if ans[i]<=k then writeln(ans[i])
else writeln('NIE'); end.
【BZOJ2527】Meteors(整体二分)的更多相关文章
- 【BZOJ2527】[Poi2011]Meteors 整体二分
[BZOJ2527][Poi2011]Meteors Description Byteotian Interstellar Union (BIU) has recently discovered a ...
- 【BZOJ-2527】Meteors 整体二分 + 树状数组
2527: [Poi2011]Meteors Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 831 Solved: 306[Submit][Stat ...
- BZOJ2527 [Poi2011]Meteors 整体二分 树状数组
原文链接http://www.cnblogs.com/zhouzhendong/p/8686460.html 题目传送门 - BZOJ2527 题意 有$n$个国家. 太空里有$m$个太空站排成一个圆 ...
- 【BZOJ2527】【POI2011】Meteors [整体二分]
Meteors Time Limit: 60 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 这个星球经常会下陨石雨.BI ...
- BZOJ2527[Poi2011]Meteors——整体二分+树状数组
题目描述 Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby galaxy. The ...
- 【bzoj2527】[Poi2011]Meteors 整体二分+树状数组
题目描述 有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站. 这个星球经常会下陨石雨.BIU已经预测了接下来K场陨石雨的情况.BI ...
- BZOJ2527: [Poi2011]Meteors(整体二分)
Description Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby gala ...
- bzoj 2527 Meteors - 整体二分 - 树状数组
Description Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby gala ...
- 2527: [Poi2011]Meteors[整体二分]
2527: [Poi2011]Meteors Time Limit: 60 Sec Memory Limit: 128 MB Submit: 1528 Solved: 556 [Submit][S ...
- BZOJ 2527 Meteors | 整体二分
BZOJ 2527 Meteors 题意 一个圆环上有m个位置,编号为1~m,分别属于n个国家. 有k个时刻,每个时刻都会给圆环上的一个区间中每个位置的值加上一个数. 每个国家有一个目标,问对于每个国 ...
随机推荐
- (五)SpringIoc之Bean的作用域
此文转自 https://blog.csdn.net/icarus_wang/article/details/51586776# 有状态bean和无状态bean请看 https://blog.csdn ...
- Flutter交互实战-即刻App探索页下拉&拖拽效果
前言 Flutter最近比较热门,但是Flutter成体系的文章并不多,前期避免不了踩坑:我这篇文章主要介绍如何使用Flutter实现一个比较复杂的手势交互,顺便分享一下我在使用Flutter过程中遇 ...
- yii在Windows下安装(通过composer方式)
Composer 安装: (Composer 不是一个包管理器,它仅仅是一个依赖管理工具.它涉及 "packages" 和 "libraries",但它在每个项 ...
- iOS----创建静态库
静态库 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.根据源代码的公开情况,库可以分为2种类型 开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetworkin ...
- iOS-UI控件之UIButton
---恢复内容开始--- UIButton 既可以显示图片,又可以显示文字,还能随时调整内部位置 系统自带尺寸 storyboard内部调整UIButton属性 状态 监听按钮点击事件 凡是继承自UI ...
- AIX6.1平台11.2.0.3RAC 实施手册
1 前言 此文档详细描述了Oracle 11gR2 数据库在AIX6.1上的安装RAC的检查及安装步骤.文档中#表示root用户执行,$表示grid或oracle用户执行. 2 系统环境 操作系统环境 ...
- 理解 call, apply 的用法
callcall() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数. function list() { return Array.prototype.slice.call ...
- Java8新特性 Stream流式思想(一)
遍历及过滤集合中的元素使用传统方式遍历及过滤集合中的元素package cn.com.zq.demo01.Stream.test01.Stream; import java.util.ArrayLis ...
- DEALLOCATE - 删除一个准备好的查询
SYNOPSIS DEALLOCATE [ PREPARE ] plan_name DESCRIPTION 描述 DEALLOCATE 用于删除前面准备好的查询. 如果你没有明确 DEALLOCATE ...
- Python之__class__.__module__,__class__.__name__