【BZOJ】【2527】【POI2011】Meteors
整体二分+树状数组
整体二分……感谢zyf提供的入门题
简单粗暴的做法:枚举每一个国家,二分他的$w_i$,然后计算……然而这样效率很低……
整体二分就是:对所有的国家一起进行二分,$w_i$在mid之前的,进左边,否则进右边(是不是很像线段树呀~其实就是吧……
其实感觉代码写起来也跟线段树有些相似?
RE:我没有在结束的时候加if (L==R) return;这样的话,只靠开头的 if (!V[o].size()) return;当极限数据的时候,走到叶子再乘二的话,就超出4*N的范围了……就跑到外面去了……所以就RE了……
/**************************************************************
Problem: 2527
User: Tunix
Language: C++
Result: Accepted
Time:17700 ms
Memory:56832 kb
****************************************************************/ //BZOJ 2527
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
typedef long long LL;
inline int getint(){
int r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
return r*v;
}
const int N=3e5+;
/*******************template********************/ int n,m,K,p[N],l[N],r[N],a[N],ans[N],tot;
vector<int>G[N],V[N<<];
LL c[N];
void add(int x,LL v){
for(;x<=m;x+=x&(-x)) c[x]+=v;
}
LL sum(int x){
LL r=;
for(;x;x-=x&(-x)) r+=c[x];
return r;
}
void solve(int o,int L,int R){
if (!V[o].size()) return;
int mid=(L+R)>>;
F(i,L,mid){
if (l[i]>r[i]) add(,a[i]);
add(l[i],a[i]); add(r[i]+,-a[i]);
}
rep(i,V[o].size()){
int x=V[o][i]; LL y=;
rep(j,G[x].size()){
y+=sum(G[x][j]);
if (y>=p[x]) break;
}
if (y>=p[x]){
if (L==R) ans[x]=L;
else V[o<<].pb(x);
}else{
if (L==R) ans[x]=-;
else{
p[x]-=y;
V[o<<|].pb(x);
}
}
}
F(i,L,mid){
if (l[i]>r[i]) add(,-a[i]);
add(l[i],-a[i]); add(r[i]+,a[i]);
}
if (L==R) return;
solve(o<<,L,mid); solve(o<<|,mid+,R);
} int main(){
#ifndef ONLINE_JUDGE
freopen("2527.in","r",stdin);
freopen("2527.out","w",stdout);
#endif
n=getint(); m=getint();
F(i,,m){
int x=getint();
G[x].pb(i);
}
F(i,,n) p[i]=getint();
K=getint();
F(i,,K){
l[i]=getint(); r[i]=getint(); a[i]=getint();
}
F(i,,n) V[].pb(i);
solve(,,K);
F(i,,n){
if (ans[i]!=-) printf("%d\n",ans[i]);
else puts("NIE");
}
return ;
}
2527: [Poi2011]Meteors
Time Limit: 60 Sec Memory Limit: 128 MB
Submit: 415 Solved: 165
[Submit][Status][Discuss]
Description
Interstellar Union (BIU) has recently discovered a new planet in a
nearby galaxy. The planet is unsuitable for colonisation due to strange
meteor showers, which on the other hand make it an exceptionally
interesting object of study.
member states of BIU have already placed space stations close to the
planet's orbit. The stations' goal is to take samples of the rocks
flying by. The BIU Commission has partitioned the orbit into msectors,
numbered from 1to m, where the sectors 1and mare adjacent. In each
sector there is a single space station, belonging to one of the nmember
states.
state has declared a number of meteor samples it intends to gather
before the mission ends. Your task is to determine, for each state, when
it can stop taking samples, based on the meter shower predictions for
the years to come.
这个星球经常会下陨石雨。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
NIE
1
HINT
Source
【BZOJ】【2527】【POI2011】Meteors的更多相关文章
- 【BZOJ 2754 喵星球上的点名】
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2512 Solved: 1092[Submit][Status][Discuss] Descript ...
- 【BZOJ】【2738】&【Tsinsen】【A1333】矩阵乘法
整体二分+树状数组 过了[BZOJ][2527][POI2011]Meteors以后这题就没那么难啦~ 关键是[从小到大]依次插入数字,然后整体二分每个查询的第k大是在第几次插入中被插入的……嗯大概就 ...
- 【BZOJ】3052: [wc2013]糖果公园
http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...
- 【BZOJ】3319: 黑白树
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...
- 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...
- 【BZOJ】【1025】【SCOI2009】游戏
DP/整数拆分 整个映射关系可以分解成几个循环(置换群的预备知识?),那么总行数就等于各个循环长度的最小公倍数+1(因为有个第一行的1~N).那么有多少种可能的排数就等于问有多少种可能的最小公倍数. ...
- 【BZOJ】1013: [JSOI2008]球形空间产生器sphere
[BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...
- 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)
Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...
- 【BZOJ】【3697】采药人的路径&【3127】【USACO2013 Open】Yin and Yang
点分治 Orz hzwer 倒是比较好想到点分治……然而在方案统计这里,我犯了两个错误…… 1.我比较傻逼的想的是:通过儿子来更新父亲,也就是统计以x为根的子树中xxxx的路径有多少条……这样转移. ...
- 【BZOJ】【3083】遥远的国度
树链剖分/dfs序 其实过了[BZOJ][4034][HAOI2015]T2以后就好搞了…… 链修改+子树查询+换根 其实静态树的换根直接树链剖分就可以搞了…… 因为其实只有一样变了:子树 如果roo ...
随机推荐
- mysql 新增时,唯一索引冲突时更新
INSERT INTO table_name(f1 ,f2 ,f3) VALUES(? ,?) on duplicate key update f2 = ? ,f3 = ?
- 14个你可能不知道的JavaScript调试技巧
调试JS的时候,搜索一下这个标题
- 大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础
第五章 函数式编程-基础5.1 函数式编程内容说明5.1.1 函数式编程内容5.1.2 函数式编程授课顺序5.2 函数式编程介绍5.2.1 几个概念的说明5.2.2 方法.函数.函数式编程和面向对象编 ...
- 磁盘备份工具dcfldd
磁盘备份工具dcfldd dcfldd是Kali Linux自带的一款磁盘备份工具.该工具是dd工具的增强版,更适合渗透测试和安全领域.dcfldd提供实时哈希校验功能,确保数据的安全.同时,它还 ...
- [ 原创 ]新手作品-我的第一款安卓自学作品---YY音乐诞生了
YY音乐---我前前后后断断续续花了3个月时间,边从0基础开始学Android 和Java,边开始做自己的Android第一款软件,之间看了许多教学视频,许多博客,才算Android入了一点点门道,终 ...
- MongoDB 记录
查询操作: db.stu.find() //查询所有数据 db.stu.findOne() //查询一个数据 db.stu.find().pretty() //查询之后,格式化显示 db.stu.fi ...
- BZOJ 1975: [Sdoi2010]魔法猪学院 大水题 第k短路 spfa
https://www.lydsy.com/JudgeOnline/problem.php?id=1975 我好像到现在了第k短路都不会写,mdzz. 先spfa求出最短路,然后扫点存各种前置路径已经 ...
- poj 1328 Radar Installation 排序贪心
Radar Installation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 56702 Accepted: 12 ...
- 批量替换url,指定内容不替换
如果需要批量替换url的某几部分,当然是用正则了比如在CI框架中要把 <img src="pc/baidu/aa.jpg"> 替换成 <img src=" ...
- GIT(4)----免输入账号和密码方法
1.全局方式 包删除了,再次下载也不需要在配置输入密码和用户名 参考资料:git pull 和 git push免输入账号和密码方法 2.局部方式 包删除了,密码用户也会被删除,需要重新设置 打开终端 ...