【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个时刻,每个时刻都会给圆环上的一个区间中每个位置的值加上一个数. 每个国家有一个目标,问对于每个国 ...
随机推荐
- jmeter(六)关联
话说LoadRunner有的一些功能,比如:参数化.检查点.集合点.关联,Jmeter也都有这些功能,只是功能可能稍弱一些,今天就关联来讲解一下. JMeter的关联方法有两种:后置处理器-正则表达式 ...
- 转】在Ubuntu中安装Cassandra
原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/ 感谢! Posted: Mar 22, 2014 Tags: cas ...
- 用css制作圆环图表 (vue,sass)
效果图: 思路 :在一个容器里再放两个矩形,每个矩形都占一半,给这两个矩形都设置溢出隐藏,当去旋转矩形里面的圆形的时候,溢出部分就被隐藏掉了,这样就可以达到想要的效果. 代码-html: <di ...
- Mac下部署与启动STF
一.stf在Mac下的部署1.安装Java及jdk可自己谷歌(如果不能自建云梯)2.安装nodejs包(我是直接在官网下载的LTS版本) • Node.js v8.12.0 to /usr/local ...
- Node.js——事件与发布机制
- C/C++ 函数模板、全局变量、register、存储周期
1.函数声明时可以简写,如: int max(int,int): 2.函数模板: 格式: template <typename haha>或template <class haha& ...
- Java8新特性 Stream流式思想(一)
遍历及过滤集合中的元素使用传统方式遍历及过滤集合中的元素package cn.com.zq.demo01.Stream.test01.Stream; import java.util.ArrayLis ...
- 【Linux】CentOS tar压缩与解压命令大全
tar命令详解 -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用 ...
- Lodash数组方法中文总结
LodashAPI总结 Lodash是一个特别特别好用的工具,感觉有了Lodash就没有解决不了的问题了~~~~ 使用初开始 官网 https://www.lodashjs.com/docs/4.17 ...
- MySQL索引的用处
MySQL索引在MySQL数据库中,可以有效提高查询的效率,尤其是查询数据量非常大时,效果更为明显,往往能使查询速度加快成千上万倍. MySQL索引是很重要的概念,应用的范围非常广.那么,MySQL索 ...