【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个时刻,每个时刻都会给圆环上的一个区间中每个位置的值加上一个数. 每个国家有一个目标,问对于每个国 ...
随机推荐
- 205 Isomorphic Strings 同构字符串
给定两个字符串 s 和 t,判断它们是否是同构的.如果 s 中的字符可以被替换最终变成 t ,则两个字符串是同构的.所有出现的字符都必须用另一个字符替换,同时保留字符的顺序.两个字符不能映射到同一个字 ...
- Kali linux 2016.2(Rolling)里的枚举服务
前言 枚举是一类程序,它允许用户从一个网络中收集某一类的所有相关服务.
- 安装CentOS--设置网络_2
(1)虽然CentOS 7已经可以联网,但是在日常的运维工作中,我们是需要手动给Linux系统设置IP地址的.输入如下命令. # vi /etc/sysconfig/network-scripts/i ...
- nginx for ubuntu
1.创建文件夹 :mkdir nginx 2.解压nginx: tar zxvf nginx.gz.tar 3.nginx 初始化:在nginx的路径下执行:./configure 有可能会报错: . ...
- C语言基础-运算符
sizeof()运算符 •sizeof可以用来计算一个变量或者一个常量.一种数据类型所占的内存字节数 •sizeof一共有3种形式 1.sizeof( 变量\常量 ) sizeof(10 ...
- Swift protocol extension method is called instead of method implemented in subclass
Swift protocol extension method is called instead of method implemented in subclass protocol MyProto ...
- Pycharm 设置python文件自动生成头部信息模板
设置头部信息路径: 打开File—Settings—Editor—File and Code Templates—Python Script 输入要自动生成的头部信息模板 这样,新建py文件就会自动生 ...
- Java IO(三)--字节流基本使用
I/O流分类: InputStream和Read的子类都有read(),用来读取单个字节或字节数组 OutputStream和write的子类都有write(),用来写入单个字节或字节数组 一般都是通 ...
- java中mkdir()和mkdirs()区别
mkdirs()可以建立多级文件夹 mkdir()只会建立一级的文件夹 例如: new File("/file/one/two").mkdirs(); 可建立/file/one/t ...
- JS中的同步异步问题
<script> /* * JS 是单线程 * 同步 异步 * 常见的异步 * 1.定时器 * 2.事件绑定 * 3.ajax请求(一般的都是异步) * 4.回调函数也可以理解成 异步 * ...