BZOJ 2527 Meteors
http://www.lydsy.com/JudgeOnline/problem.php?id=2527
思路:整体二分
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#define ll long long
#define inf 1000000010
int n,m,a[],first[],next[],tot;
int tol[],tor[],ans[],id[],K;
ll cur[],tmp[],h[],go[];
struct node{
int id,l,r,w;
}q[];
int read(){
int t=,f=;char ch=getchar();
while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
return t*f;
}
ll sum(int x){
ll res=;
while (x){
res+=h[x];
x-=(x)&(-x);
}
return res;
}
void add(int x,ll v){
for (int i=x;i<=m;i+=(i)&(-i))
h[i]+=v;
}
void add(int x,int y,ll v){
add(x,v);add(y+,-v);
}
void solve(int l,int r,int x,int y){
if (x>y) return;
if (l==r){
for (int i=x;i<=y;i++)
ans[id[i]]=l;
return;
}
int lnum=,rnum=;
int mid=(l+r)>>;
for (int i=l;i<=mid;i++)
if (q[i].l<=q[i].r) add(q[i].l,q[i].r,q[i].w);
else add(q[i].l,m,q[i].w),add(,q[i].r,q[i].w);
for (int i=x;i<=y;i++){
tmp[id[i]]=;
for (int j=first[id[i]];j;j=next[j]){
int pur=go[j];
tmp[id[i]]+=sum(pur);
if (tmp[id[i]]+cur[id[i]]>=a[id[i]]) break;
}
if (tmp[id[i]]+cur[id[i]]>=a[id[i]]) tol[++lnum]=id[i];
else tor[++rnum]=id[i],cur[id[i]]+=tmp[id[i]];
}
for (int i=l;i<=mid;i++)
if (q[i].l<=q[i].r) add(q[i].l,q[i].r,-q[i].w);
else add(q[i].l,m,-q[i].w),add(,q[i].r,-q[i].w);
for (int i=;i<lnum;i++)
id[x+i]=tol[i+];
for (int i=;i<rnum;i++)
id[x+lnum+i]=tor[i+];
solve(l,mid,x,x+lnum-);
solve(mid+,r,x+lnum,y);
}
int main(){
n=read();m=read();
for (int i=;i<=m;i++){
int x=read();
tot++;
next[tot]=first[x];
first[x]=tot;
go[tot]=i;
}
for (int i=;i<=n;i++)
a[i]=read();
K=read();
for (int i=;i<=K;i++){
q[i].l=read();q[i].r=read();q[i].w=read();
q[i].id=i;
}
K++;
q[K].l=;q[K].r=m;q[K].w=inf;
q[K].id=K;
for (int i=;i<=n;i++)
id[i]=i;
solve(,K,,n);
for (int i=;i<=n;i++){
if (ans[i]!=K) printf("%d\n",ans[i]);
else puts("NIE");
}
return ;
}
BZOJ 2527 Meteors的更多相关文章
- BZOJ 2527 Meteors | 整体二分
BZOJ 2527 Meteors 题意 一个圆环上有m个位置,编号为1~m,分别属于n个国家. 有k个时刻,每个时刻都会给圆环上的一个区间中每个位置的值加上一个数. 每个国家有一个目标,问对于每个国 ...
- bzoj 2527 Meteors - 整体二分 - 树状数组
Description Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby gala ...
- BZOJ 2527 [Poi2011]Meteors(整体二分)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2527 [题目大意] 有N个成员国.现在它发现了一颗新的星球, 这颗星球的轨道被分为M份 ...
- BZOJ 2527 [Poi2011]Meteors:整体二分
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2527 题意: 有n个国家和m个空间站,每个空间站都属于一个国家,一个国家可以有多个空间站, ...
- bzoj 2527: [Poi2011]Meteors 整体二分
给每个国家建一个链表,这样分治过程中的复杂度就和序列长度线形相关了,无脑套整体二分就可以. (最坑的地方是如果所有位置都是一个国家,那么它的样本个数会爆longlong!!被这个坑了一次,大于p[i] ...
- 【bzoj 2527】[Poi2011]Meteors
Description Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby gala ...
- bzoj 2527: [Poi2011]Meteors
昨天写了一晚,越写复杂度越感觉不对,早上一想果然是假的. (这里n,m,k我就不区分了) 首先一个城市的询问可以很容易的二分 check用树状数组维护区间(区间修改,单点查询的那种) 一次是\(O(n ...
- BZOJ 2527 [Poi2011]Meteors (整体二分+树状数组)
整体二分板题,没啥好讲的-注意是个环-还有所有贡献会爆longlong,那么只要在加之前判断一下有没有达到需要的值就行了- CODE #include <set> #include < ...
- BZOJ 2527 & 整体二分
Byteotian Interstellar Union有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站. 这个星球经常会下陨石雨 ...
随机推荐
- 简述WebService与.NET Remoting的区别及适应场合 WCF
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhoufoxcn.blog.51cto.com/792419/166990 为了 ...
- Java虚拟机内存优化实践
前面一篇文章介绍了Java虚拟机的体系结构和内存模型,既然提到内存,就不得不说到内存泄露.众所周知,Java是从C++的基础上发展而来的,而C++程序的很大的一个问题就是内存泄露难以解决,尽管Java ...
- 上传jar包到Apache Archiva本地仓库
1.登录archiva,点击左侧的upload Artifact 2 jar 包名称 为:java-client-4.1.2.jar 网上的pom配置为: <!-- https://mvnrep ...
- Dubbo亮点总结
Dubbo是阿里巴巴的一个开源RPC项目,可在http://dubbo.io进行訪问 类似的产品有Hessian.spring httpinvoke 等. Dubbo的亮点总结例如以下: 1.服务注冊 ...
- TimeSpinner( 时间微调) 组件
本节课重点了解 EasyUI 中 Spinner(微调)组件的使用方法,这个组件依赖于Spinner(微调)组件. 一. 加载方式//class 加载方式<input id="box& ...
- DateBox( 日期输入框) 组件
本节课重点了解 EasyUI 中 DateBox(日期输入框)组件的使用方法,这个组件依赖于 Combo(自定义下拉框)和 Calendar(日历). 一. 加载方式//class 加载方式<i ...
- PagerSlidingTabStrip的使用
布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too ...
- oracle 优化 —— 分区表
一.分区表简介 分区表类型:[范围分区].[列表分区] [hash分区] [这些分区的组合分区] 范围分区:以某一个范围进行分区.eg:时间段划分. 列表分区:以某一些几个值进行分区.eg:地区 ...
- Catel帮助手册-Catel.Core:(1)参数检查
我们检查方法是否正确,一般是返回对错,或者是是否抛出一个异常,大部分人不检查异常的正确性,那么这种错误在很深的堆栈中,很难查看. Catel与一般的检查方法不同,一般是使用 public vo ...
- Grand Central Dispatch(GCD)详解(转)
概述 GCD是苹果异步执行任务技术,将应用程序中的线程管理的代码在系统级中实现.开发者只需要定义想要执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务.由于 ...