题意:

Byteotian Interstellar Union有N个成员国。现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站。
这个星球经常会下陨石雨。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。
数据范围: 1<=n,m,k<=3*10^5 1<=Pi<=10^9 1<=Ai<10^9
 
思路:RYZ作业
整体二分很显然,卡了5-6天,线段树标记持久化都过不去,树状数组暴力清空也T,实在是没办法了……
 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(整体二分)的更多相关文章

  1. 【BZOJ2527】[Poi2011]Meteors 整体二分

    [BZOJ2527][Poi2011]Meteors Description Byteotian Interstellar Union (BIU) has recently discovered a ...

  2. 【BZOJ-2527】Meteors 整体二分 + 树状数组

    2527: [Poi2011]Meteors Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 831  Solved: 306[Submit][Stat ...

  3. BZOJ2527 [Poi2011]Meteors 整体二分 树状数组

    原文链接http://www.cnblogs.com/zhouzhendong/p/8686460.html 题目传送门 - BZOJ2527 题意 有$n$个国家. 太空里有$m$个太空站排成一个圆 ...

  4. 【BZOJ2527】【POI2011】Meteors [整体二分]

    Meteors Time Limit: 60 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 这个星球经常会下陨石雨.BI ...

  5. BZOJ2527[Poi2011]Meteors——整体二分+树状数组

    题目描述 Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby galaxy. The ...

  6. 【bzoj2527】[Poi2011]Meteors 整体二分+树状数组

    题目描述 有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站. 这个星球经常会下陨石雨.BIU已经预测了接下来K场陨石雨的情况.BI ...

  7. BZOJ2527: [Poi2011]Meteors(整体二分)

    Description Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby gala ...

  8. bzoj 2527 Meteors - 整体二分 - 树状数组

    Description Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby gala ...

  9. 2527: [Poi2011]Meteors[整体二分]

    2527: [Poi2011]Meteors Time Limit: 60 Sec  Memory Limit: 128 MB Submit: 1528  Solved: 556 [Submit][S ...

  10. BZOJ 2527 Meteors | 整体二分

    BZOJ 2527 Meteors 题意 一个圆环上有m个位置,编号为1~m,分别属于n个国家. 有k个时刻,每个时刻都会给圆环上的一个区间中每个位置的值加上一个数. 每个国家有一个目标,问对于每个国 ...

随机推荐

  1. hdu 5036 Explosion bitset优化floyd

    http://acm.hdu.edu.cn/showproblem.php?pid=5036 题意就是给定一副有向图,现在需要走遍这n个顶点,一开始出发的顶点是这n个之中的随便一个. 如果走了1,那么 ...

  2. CSS3 按钮特效(一)

    1. 实例 2.HTML 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  3. 纯css实现的三级水平导航菜单

    vscode练习使用开发纯css的三级水平导航菜单.先上图: 1.html5布局 <html> <head> <meta charset="UTF-8" ...

  4. [转]Sublime Text操作

    原文地址:http://www.madongdong.me/sublime-text3%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/ 作者:马东东 前言(Prologue) ...

  5. git介绍与使用

    git是去中心化版本管理工具,项目创建一个远程版本,将其clone到本地,会在本地创建一个本地仓,一个开发项目,在没有网络的时候依然可以提交修改到本地仓,当有网络的时候再提交到远程仓库.git可以快速 ...

  6. 掌握Spark机器学习库-07.6-线性回归实现房价预测

    数据集 house.csv 数据概览 代码 package org.apache.spark.examples.examplesforml import org.apache.spark.ml.fea ...

  7. AndroidStudio启动App时,数据取不到。

    最近在用AndroidStudio开发App的时候,所连的服务器如果是换成本机上的,那么启动App的时候数据就读取不出来,连其它电脑上的服务器就是正常的,如下: 05-11 09:36:57.178 ...

  8. SQLite busy handler

    SQLite doesn't support high concurrency. In case of a lot of concurrent access from multi-process or ...

  9. 【译】x86程序员手册36-9.9异常汇总

    9.9 Exception Summary 异常汇总 Table 9-6 summarizes the exceptions recognized by the 386. Table 9-6. Exc ...

  10. 洛谷 P2801 教主的魔法

    题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的身高一开始都是 ...