BZOJ_2527_[Poi2011]Meteors_整体二分
BZOJ_2527_[Poi2011]Meteors_整体二分
Description
这个星球经常会下陨石雨。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。
数据范围:
Input
Output
Sample Input
1 3 2 1 3
10 5 7
3
4 2 4
1 3 1
3 5 2
Sample Output
3
NIE
1
整体二分。
solve(b,e,l,r)表示处理b到e的询问,答案在l到r区间内。
二分mid,把l到mid之间的陨石加进去。
用树状数组维护区间加单点求和。
如果答案在左边就往左走,否则减去左边的贡献往右走。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 300050
int n,m,c[N],ans[N],head[N],to[N],nxt[N],cnt,k;
inline void add(int u,int v) {
to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt;
}
struct A {
int id,v;
}q[N],t[N];
struct P {
int l,r,v;
}a[N];
void fix(int x,int v){for(;x<=m;x+=x&(-x)) c[x]+=v;}
int inq(int x){int re=0;for(;x;x-=x&(-x)) re+=c[x]; return re;}
void solve(int b,int e,int l,int r) {
if(b>e) return ;
int i,mid=(l+r)>>1,lp=b,rp=e,j;
if(l==r) {
for(i=b;i<=e;i++) ans[q[i].id]=l;
return ;
}
for(i=l;i<=mid;i++) {
if(a[i].l<=a[i].r) {
fix(a[i].l,a[i].v); fix(a[i].r+1,-a[i].v);
}else {
fix(1,a[i].v); fix(a[i].r+1,-a[i].v);
fix(a[i].l,a[i].v);
}
}
for(i=b;i<=e;i++) {
int sizls=0;
for(j=head[q[i].id];j;j=nxt[j]) {
int pos=to[j]-n;
sizls+=inq(pos);
if(sizls>=q[i].v) break;
}
if(sizls>=q[i].v||sizls<0) t[lp++]=q[i];
else q[i].v-=sizls,t[rp--]=q[i];
}
for(i=b;i<=e;i++) q[i]=t[i];
for(i=l;i<=mid;i++) {
if(a[i].l<=a[i].r) {
fix(a[i].l,-a[i].v); fix(a[i].r+1,a[i].v);
}else {
fix(1,-a[i].v); fix(a[i].r+1,a[i].v);
fix(a[i].l,-a[i].v);
}
}
solve(b,rp,l,mid);
solve(lp,e,mid+1,r);
}
int main() {
scanf("%d%d",&n,&m);
int i,x;
for(i=1;i<=m;i++) {
scanf("%d",&x);
add(x,i+n);
}
for(i=1;i<=n;i++) {
scanf("%d",&q[i].v); q[i].id=i;
}
scanf("%d",&k);
for(i=1;i<=k;i++) {
scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].v);
}
solve(1,n,1,k+1);
for(i=1;i<=n;i++) {
if(ans[i]<=k) printf("%d\n",ans[i]);
else puts("NIE");
}
}
BZOJ_2527_[Poi2011]Meteors_整体二分的更多相关文章
- [bzoj2527][Poi2011]Meteors_整体二分_树状数组
Meteors bzoj-2527 Poi-2011 题目大意:题目链接. 注释:略. 想法: 首先答案可以离线,且具有单调性. 这里的单调性就是随着时间的推移,每个国家收集的陨石数增加. 不难想到整 ...
- 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 ...
- 洛谷P3527 [POI2011]MET-Meteors [整体二分]
题目传送门 Meteors 格式难调,题面就不妨放了. 分析: 一道整体二分的练手题. 就是一般的整体二分的套路,但是要注意,将修改和询问加入队列的时候要先加修改再加询问.另外,博主代码打得太丑,常数 ...
- BZOJ.2527.[POI2011]MET-Meteors(整体二分)
题目链接 BZOJ 洛谷 每个国家的答案可以二分+求前缀和,于是可以想到整体二分. 在每次Solve()中要更新所有国家得到的值,不同位置的空间站对应不同国家比较麻烦. 注意到每次Solve()其国家 ...
随机推荐
- Gradle初探
(一):创建一个Gradle项目 1. 环境准备 1.1. 先上Gradle官网下载最新版的程序,地址:https://gradle.org/gradle-download/. 1.2. 配置环境变量 ...
- CSS布局之--各种居中
居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍. 注:本文所讲方法除了特别说明 ...
- Google Bigtable (中文版)
http://dblab.xmu.edu.cn/post/google-bigtable/ Abstract BigTable是一个分布式存储系统,它可以支持扩展到很大尺寸的数据:PB级别的数据,包含 ...
- currval of sequence "follow_id_seq" is not yet defined in this session
postgresql上使用 select currval('follow_id_seq'); 报错: currval of sequence "follow_id_seq" is ...
- java解析XML文件四种方法之引入源文件
1.DOM解析(官方) try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Documen ...
- OpenCASCADE Texture Mapping
OpenCASCADE Texture Mapping eryar@163.com Abstract. 纹理贴图技术的出现和流行是图形显示技术的一个非常重要的里程碑,直接影响3D技术从工业进入娱乐领域 ...
- nginx安装配置+集群tomcat:Centos和windows环境
版本:nginx-1.8.0.tar.gz 官网:http://nginx.org/en/download.html 版本:apache-tomcat-6.0.44.tar.gz 官 ...
- Android 资源文件命名与使用
[推荐]资源文件需带模块前缀 [推荐]layout 文件的命名方式 Activity 的 layout 以 module_activity 开头 Fragment 的 layout 以 module_ ...
- leetCode刷题(找到最长的回文字符串)
Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...
- HTML DOM innerHTML 属性及实现图片连续播放
定义和用法 innerHTML 属性设置或返回表格行的开始和结束标签之间的 HTML. 语法 tablerowObject.innerHTML=HTML 实例 下面的例子返回了表格行的 inner H ...