[BZOJ2527] [Poi2011]Meteors(整体二分)
对于单个国家,可以对答案进行二分,每次找出此时的陨石数量,如果大于需要的那么答案就在[l,mid],否则就在[mid+1,r]里面
而对于很多国家,也可以进行二分,solve(l,r,L,R)表示询问id[l...r]的答案都在[L,R]之间
每次用树状数组统计一下
Code
#include <cstdio>
#include <algorithm>
#define lowbit(x) ((x)&(-x))
#define N 300010
#define ll long long
using namespace std; struct edge{int to,nex;}e[N*2];
struct que{int x,y,z;}q[N];
const int Inf=1e9;
int n,m,k,tot,head[N],A[N],id[N],Ans[N],tmp,tmp2[N];
ll T[N]; inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
} inline void Link(int u,int v){
e[++tot].to=v;e[tot].nex=head[u];head[u]=tot;
} ll query(int x){
ll res=0;
for(;x;x-=lowbit(x)) res+=T[x];
return res;
} void add(int x,int v){
for(;x<=m;x+=lowbit(x)) T[x]+=v;
} void opera(int k,int f){
add(q[k].x,f*q[k].z),add(q[k].y+1,f*q[k].z*(-1));
if(q[k].x>q[k].y) add(1,f*q[k].z);
} bool mk[N];
inline void solve(int l,int r,int L,int R){
if(l>r) return;
if(L==R){
for(int i=l;i<=r;++i) Ans[id[i]]=L;
return;
}
int mid=(L+R)>>1;
for(;tmp<=mid;) opera(++tmp,1);
for(;tmp>mid;) opera(tmp--,-1);
int cnt=0,u;ll tot;
for(int i=l;i<=r;++i){
tot=0,u=id[i];
for(int j=head[u];j;j=e[j].nex){
int v=e[j].to;
tot+=query(v);
if(tot>=A[u]) break;
}
if(tot>=A[u]) mk[u]=1,cnt++;
else mk[u]=0;
}
int l1=l,l2=l+cnt;
for(int i=l;i<=r;++i)
if(mk[id[i]]) tmp2[l1++]=id[i];
else tmp2[l2++]=id[i];
for(int i=l;i<=r;++i) id[i]=tmp2[i];
solve(l,l1-1,L,mid);
solve(l1,l2-1,mid+1,R);
} int main(){
n=read(),m=read();
for(int i=1,x;i<=m;++i) x=read(),Link(x,i);
for(int i=1;i<=n;A[i++]=read());
k=read();
for(int i=1;i<=k;++i) q[i].x=read(),q[i].y=read(),q[i].z=read();
q[++k].x=1,q[k].y=m,q[k].z=Inf;
for(int i=1;i<=n;++i) id[i]=i;
solve(1,n,1,k);
for(int i=1;i<=n;++i) (Ans[i]<k)?printf("%d\n",Ans[i]):puts("NIE");
return 0;
}
[BZOJ2527] [Poi2011]Meteors(整体二分)的更多相关文章
- BZOJ2527 [Poi2011]Meteors 整体二分 树状数组
		原文链接http://www.cnblogs.com/zhouzhendong/p/8686460.html 题目传送门 - BZOJ2527 题意 有$n$个国家. 太空里有$m$个太空站排成一个圆 ... 
- BZOJ2527[Poi2011]Meteors——整体二分+树状数组
		题目描述 Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby galaxy. The ... 
- BZOJ2527: [Poi2011]Meteors(整体二分)
		Description Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby gala ... 
- 【BZOJ2527】[Poi2011]Meteors 整体二分
		[BZOJ2527][Poi2011]Meteors Description Byteotian Interstellar Union (BIU) has recently discovered a ... 
- 【bzoj2527】[Poi2011]Meteors  整体二分+树状数组
		题目描述 有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站. 这个星球经常会下陨石雨.BIU已经预测了接下来K场陨石雨的情况.BI ... 
- [bzoj2527][Poi2011]Meteors_整体二分_树状数组
		Meteors bzoj-2527 Poi-2011 题目大意:题目链接. 注释:略. 想法: 首先答案可以离线,且具有单调性. 这里的单调性就是随着时间的推移,每个国家收集的陨石数增加. 不难想到整 ... 
- 【BZOJ-2527】Meteors      整体二分 + 树状数组
		2527: [Poi2011]Meteors Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 831 Solved: 306[Submit][Stat ... 
- 2527: [Poi2011]Meteors[整体二分]
		2527: [Poi2011]Meteors Time Limit: 60 Sec Memory Limit: 128 MB Submit: 1528 Solved: 556 [Submit][S ... 
- bzoj 2527: [Poi2011]Meteors 整体二分
		给每个国家建一个链表,这样分治过程中的复杂度就和序列长度线形相关了,无脑套整体二分就可以. (最坑的地方是如果所有位置都是一个国家,那么它的样本个数会爆longlong!!被这个坑了一次,大于p[i] ... 
- Luogu3527 POI2011 Meteors 整体二分、树状数组、差分
		传送门 比较板子的整体二分题目,时限有点紧注意常数 整体二分的过程中将时间在\([l,mid]\)之间的流星使用树状数组+差分进行维护,然后对所有国家查看一遍并分好类,递归下去,记得消除答案在\([m ... 
随机推荐
- Python中open文件的各种打开模式
			对于Python打开文件的模式,总是记不住,这次在博客里记录一下 r+: Open for reading and writing. The stream is positioned at th ... 
- SpringCloud的学习记录(3)
			这一章节讲搭建config-server的项目. 在我们生成的Demo项目上右键点击New->Module->spring Initializr, 然后next, 填写Group和Arti ... 
- python读入文档中的一行
			从文件log_fusion中读入数据 方法1 f = open("log_fusion.txt") # 返回一个文件对象 line = f.readline() # 调用文件的 r ... 
- 数据结构与算法分析java——线性表1
			说到线性结构的话,我们可以根据其实现方式分为三类: 1)顺序结构的线性表 2)链式结构的线性表 3)栈和队列的线性表 应用程序后在那个的数据大致有四种基本的逻辑结构: 集合:数据元素之间只有&qu ... 
- 【JavaScript 封装库】BETA 5.0 测试版发布!
			JavaScript 前端框架(封装库) BETA 5.0 已于10月10日正式发布,今天开始提供 BETA 5.0 的 API 参考文献.相较于之前 5 个版本的发布都是草草的提供源代码,并没有很多 ... 
- 【JavaScript 封装库】BETA 3.0 测试版发布!
			/* 源码作者: 石不易(Louis Shi) 联系方式: http://www.shibuyi.net =============================================== ... 
- 快餐店之间插入仓库,路最短,DP,POJ(1485)
			题目链接:http://poj.org/problem?id=1485 暂时我还没想出思路求路径.哈哈哈,先写一下中间步骤吧. #include <stdio.h> #include &l ... 
- 2017.11.10 web中URL和URI的区别
			URI:Uniform Resource Identifier,统一资源标识符: •URL:Uniform Resource Locator,统一资源定位符: •URN:Uniform Resourc ... 
- linq 和lambda查询
			EF 查询的两种 写法. linq 方法 或者 lambda方法 其中 ,只有tolist()的时候,才会真正的 在数据库中执行. 如果没有 tolist 方法,那么province1是 iqueab ... 
- Spring boot 项目导出可执行jar
			配置文件中添加插件 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>s ... 
