Luogu P3527 [POI2011]MET-Meteors 整体二分
思路:整体二分
提交:4次
错因:树状数组开的$int$
题解:
二分操作序列,将仅用$[l,md]$即可满足要求的国家递归到左半边,将仅用$[l,md]$不能满足要求的国家,把他们的要求去掉左半边的贡献,递归到右半边。
具体来说,开一个以空间站为下标的树状数组(把环展成链),区间加单点求和转化为差分和前缀和,依次加入$[l,md]$中的所有操作区间;
然后每个国家枚举自己的所有空间站,计算贡献,判断前$[l,md]$是否满足,来决定向左右递归的方向。
#include<iostream>
#include<cstdio>
using namespace std;
#define ull unsigned long long
#define ll long long
#define R register ll
#define pause (for(R i=1;i<=10000000000;++i))
#define In freopen("NOIPAK++.in","r",stdin)
#define Out freopen("out.out","w",stdout)
namespace Fread {
static char B[<<],*S=B,*D=B;
#ifndef JACK
#define getchar() (S==D&&(D=(S=B)+fread(B,1,1<<15,stdin),S==D)?EOF:*S++)
#endif
inline ll g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
if(ch==EOF) return EOF; do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
} inline bool isempty(const char& ch) {return (ch<=||ch>=);}
inline void gs(char* s) {
register char ch; while(isempty(ch=getchar()));
do *s++=ch; while(!isempty(ch=getchar()));
}
} using Fread::g; using Fread::gs; namespace Luitaryi {
const int N=3e++;
int n,m,k,lim,ct;
struct node {int fir,rk; ll w;}a[N],tmp[N];
#define fir(u) a[u].fir
int vr[N],nxt[N],LL[N],RR[N],W[N],ans[N];
ll c[N<<];
inline void adde(int u,int v) {vr[++ct]=v,nxt[ct]=fir(u),fir(u)=ct;}
inline int lbt(int x) {return x&-x;}
inline void add(int pos,int inc) {for(;pos<=lim;pos+=lbt(pos)) c[pos]+=inc;}
inline ll query(int pos) { R ret=;
for(;pos;pos-=lbt(pos)) ret+=c[pos]; return ret;
}
inline void solve(int l,int r,int s,int t) {
if(l==r) {for(R i=s;i<=t;++i) ans[a[i].rk]=l; return ;}
R md=l+r>>,f=s-,b=t+;
for(R i=l;i<=md;++i) add(LL[i],W[i]),add(RR[i]+,-W[i]);
for(R u=s;u<=t;++u) { R cnt=;
for(R i=fir(u),lim=a[u].w;i&&cnt<lim;i=nxt[i]) { R v=vr[i];
cnt+=query(v)+query(v+m);
} if(cnt>=a[u].w) tmp[++f]=a[u];
else tmp[--b]=a[u],tmp[b].w-=cnt;
} for(R i=l;i<=md;++i) add(LL[i],-W[i]),add(RR[i]+,W[i]);
for(R i=s;i<=f;++i) a[i]=tmp[i];
for(R i=t;i>=b;--i) a[i]=tmp[i];
solve(l,md,s,f); solve(md+,r,b,t);
}
inline void main() {
n=g(),m=g(),lim=m<<;
for(R i=,x;i<=m;++i) x=g(),adde(x,i);
for(R i=;i<=n;++i) a[i].w=g(),a[i].rk=i;
k=g(); for(R i=;i<=k;++i) LL[i]=g(),RR[i]=g(),W[i]=g(),LL[i]>RR[i]?RR[i]+=m:;
solve(,k+,,n); for(R i=;i<=n;++i) ans[i]==k+?printf("NIE\n"):printf("%d\n",ans[i]);
}
}
signed main() {
Luitaryi::main();
return ;
}
2019.07.14
Luogu P3527 [POI2011]MET-Meteors 整体二分的更多相关文章
- 【BZOJ2527】【POI2011】Meteors [整体二分]
Meteors Time Limit: 60 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 这个星球经常会下陨石雨.BI ...
- 洛谷P3527 [POI2011]MET-Meteors(整体二分)
传送门 整体二分 先二分一个答案,判断是否可行,把可行的全都扔到左边,不可行的扔到右边 判断是否可行用树状数组就行 具体细节看代码好了 整体二分细节真多……也可能是我大脑已经退化了? //minamo ...
- 2527: [Poi2011]Meteors[整体二分]
2527: [Poi2011]Meteors Time Limit: 60 Sec Memory Limit: 128 MB Submit: 1528 Solved: 556 [Submit][S ...
- 【BZOJ2527】[Poi2011]Meteors 整体二分
[BZOJ2527][Poi2011]Meteors Description Byteotian Interstellar Union (BIU) has recently discovered a ...
- bzoj 2527: [Poi2011]Meteors 整体二分
给每个国家建一个链表,这样分治过程中的复杂度就和序列长度线形相关了,无脑套整体二分就可以. (最坑的地方是如果所有位置都是一个国家,那么它的样本个数会爆longlong!!被这个坑了一次,大于p[i] ...
- BZOJ2527[Poi2011]Meteors——整体二分+树状数组
题目描述 Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby galaxy. The ...
- BZOJ2527 [Poi2011]Meteors 整体二分 树状数组
原文链接http://www.cnblogs.com/zhouzhendong/p/8686460.html 题目传送门 - BZOJ2527 题意 有$n$个国家. 太空里有$m$个太空站排成一个圆 ...
- Luogu3527 POI2011 Meteors 整体二分、树状数组、差分
传送门 比较板子的整体二分题目,时限有点紧注意常数 整体二分的过程中将时间在\([l,mid]\)之间的流星使用树状数组+差分进行维护,然后对所有国家查看一遍并分好类,递归下去,记得消除答案在\([m ...
- 【bzoj2527】[Poi2011]Meteors 整体二分+树状数组
题目描述 有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站. 这个星球经常会下陨石雨.BIU已经预测了接下来K场陨石雨的情况.BI ...
随机推荐
- spring session实现同域下单点登录
Session会话管理 在Web项目开发中,Session会话管理是一个很重要的部分,用于存储与记录用户的状态或相关的数据:通常情况下session交由容器(tomcat)来负责存储和管理,但是如果项 ...
- 级联-city
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title> ...
- MongoDB数据库、集合、文档的操作
MongoDB系列第一课:MongDB简介 MongoDB系列第二课:MongDB环境搭建 MongoDB系列第三课:MongDB用户管理 MongoDB系列第四课:MongoDB数据库.集合.文档的 ...
- Sql Server 收缩日志文件原理及always on 下的实践
一.准备知识 1.LSN LSN用来标识特定日志在日志文件中位置(详情请见什么是LSN:日志序列号),它由两部分组成:一部分用来标识VLF(虚拟日志文件)的序列号,剩下的用来标识该日志在VLF中的具体 ...
- javascript中用&&跟||来简化if{}else{}的写法
原文:javascript中用&&跟||来简化if{}else{}的写法 目录 javascript中用&&跟||来简化if{}else{}的写法 1. if else ...
- IExtenderProvider,c#组件扩展控件属性
[ProvideProperty("IsEnabled", typeof(LayoutControlItem)), ToolboxItemFilter("System.W ...
- Sharepoint2010设置自定义母版页
前言 这个文档是为Microsoft Sharepoint2010 上海文档库公司站点设计的母版页,其版本为1.0,为相关的源文件编写的使用说明书. 使用SharePoint Designer 201 ...
- Git 集成 Araxis Merge 作为比较和合并GUI工具的配置 参考自https://www.kancloud.cn/leviio/git/369125
Git 集成 Araxis Merge Win10下修改git全部配置文件方法Git 集成 Araxis Merge 作为比较和合并GUI工具的配置 那global对应的 ,gitconfig文件在哪 ...
- 关于SpringMVC映射模型视图的几点小事
一.SpringMVC概述 SpringMVC为展现层提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架之一. SpringMVC通过一套MVC注解,让POJO成为处理请求的控制器, ...
- WinPE基础知识之导出表
// 导出的东西包括函数(变量.类)地址,序号,函数(变量.类)名 typedef struct _IMAGE_EXPORT_DIRECTORY { DWORD Characteristics; // ...