BZOJ 2527 [Poi2011]Meteors (整体二分+树状数组)
整体二分板题,没啥好讲的…注意是个环…还有所有贡献会爆longlong,那么只要在加之前判断一下有没有达到需要的值就行了…
CODE
#include <set>
#include <queue>
#include <cctype>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
char cb[1<<15],*cs=cb,*ct=cb;
#define getc() (cs==ct&&(ct=(cs=cb)+fread(cb,1,1<<15,stdin),cs==ct)?0:*cs++)
template<class T>inline void read(T &res) {
char ch; int flg = 1; for(;!isdigit(ch=getchar());)if(ch=='-')flg=-flg;
for(res=ch-'0';isdigit(ch=getchar());res=res*10+ch-'0'); res*=flg;
}
const int MAXN = 300005;
vector<int>vec[MAXN];
int n, m, k, O[MAXN], L[MAXN], R[MAXN], A[MAXN], ans[MAXN];
struct query { int p, id; }q[MAXN], tmp[MAXN];
LL T[MAXN], val[MAXN];
inline void upd(int x, int val) {
while(x <= m) T[x] += val, x += x&-x;
}
inline LL qsum(int x) { LL re = 0;
while(x) re += T[x], x -= x&-x;
return re;
}
inline void calc(int ql, int qr, int l, int r) {
for(int i = ql; i <= qr; ++i) val[i] = 0;
for(int i = l; i <= r; ++i) {
upd(L[i], A[i]), upd(R[i]+1, -A[i]);
if(L[i] > R[i]) upd(1, A[i]);
}
for(int i = ql; i <= qr; ++i)
for(int j = 0, siz = vec[q[i].id].size(); j < siz; ++j) {
val[i] += qsum(vec[q[i].id][j]);
if(val[i] >= q[i].p) break;
}
for(int i = l; i <= r; ++i) {
upd(L[i], -A[i]), upd(R[i]+1, A[i]);
if(L[i] > R[i]) upd(1, -A[i]);
}
}
void solve(int ql, int qr, int vl, int vr) {
if(qr < ql) return;
if(vl == vr) { for(int i = ql; i <= qr; ++i) ans[q[i].id] = vl; return; }
int vmid = (vl + vr) >> 1;
calc(ql, qr, vl, vmid);
int st = ql, ed = qr;
for(int i = ql; i <= qr; ++i)
if(q[i].p <= val[i]) tmp[st++] = q[i];
else q[i].p -= val[i], tmp[ed--] = q[i];
for(int i = ql; i <= qr; ++i) q[i] = tmp[i];
solve(ql, st-1, vl, vmid);
solve(ed+1, qr, vmid+1, vr);
}
int main () {
read(n), read(m);
for(int i = 1, x; i <= m; ++i) read(x), vec[x].push_back(i);
for(int i = 1; i <= n; ++i) read(q[i].p), q[i].id = i;
read(k);
for(int i = 1; i <= k; ++i)
read(L[i]), read(R[i]), read(A[i]);
solve(1, n, 1, k+1);
for(int i = 1; i <= n; ++i)
if(ans[i] <= k) printf("%d\n", ans[i]);
else puts("NIE");
}
BZOJ 2527 [Poi2011]Meteors (整体二分+树状数组)的更多相关文章
- BZOJ 2527 [POI2011]MET-Meteors (整体二分+树状数组)
题目大意:略 洛谷传送门 整体二分裸题 考虑只有一个国家的情况如何处理 对询问数量二分答案,暴力$O(m)$打差分,求前缀和验证,时间是$O(mlogK)$ 如果有$n$个国家,就是$O(nmlogK ...
- 【bzoj2527】[Poi2011]Meteors 整体二分+树状数组
题目描述 有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站. 这个星球经常会下陨石雨.BIU已经预测了接下来K场陨石雨的情况.BI ...
- 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$个太空站排成一个圆 ...
- 【BZOJ-2527】Meteors 整体二分 + 树状数组
2527: [Poi2011]Meteors Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 831 Solved: 306[Submit][Stat ...
- bzoj 2527 Meteors - 整体二分 - 树状数组
Description Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby gala ...
- BZOJ 1901 Dynamic Rankings (整体二分+树状数组)
题目大意:略 洛谷传送门 这道题在洛谷上数据比较强 貌似这个题比较常见的写法是树状数组套主席树,动态修改 我写的是整体二分 一开始的序列全都视为插入 对于修改操作,把它拆分成插入和删除两个操作 像$C ...
- bzoj 2527: [Poi2011]Meteors 整体二分
给每个国家建一个链表,这样分治过程中的复杂度就和序列长度线形相关了,无脑套整体二分就可以. (最坑的地方是如果所有位置都是一个国家,那么它的样本个数会爆longlong!!被这个坑了一次,大于p[i] ...
- 【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...
随机推荐
- vscode 安装一些快捷配置
Visual Studio Code 最好的功能.插件和设置 小编推荐:掘金是一个高质量的技术社区,从 ECMAScript 6 到 Vue.js,性能优化到开源类库,让你不错过前端开发的每一个技 ...
- [转帖]nginx 禁止ip访问以及禁止post方法的简单方法
nginx禁止IP访问站点的设置方法 http://www.512873.com/archives/471.html http://www.512873.com/archives/312.html c ...
- python搞搞大数据之hbase——初探
使用python链接mysql读入一个表并把它再写到hbase 里去(九头蛇万岁) 先声明一下需要用的库: 俩!!: happybase (写这个的老哥真的happy) pymysql 建议使用 ...
- pycharm配置git版本管理
1.下载并安装git 首先你电脑必须安装git版本控制器(软件),在官网下载即可 2.安装git,正常安装即可 编缉器的选择,根据电脑实际情况选择合适的编缉器 安装参考:https://www.cnb ...
- (七)RequestMapping 和 Controller方法
文章目录 @[toc] RequestMapping功能 controller 方法返回值 RequestMapping功能 url映射 在定义 Controller 的,我们在方法上面,使用 @Re ...
- 一文让你明白Redis持久化
网上虽然已经有很多类似的介绍了,但我还是自己总结归纳了一下,自认为内容和细节都是比较齐全的. 文章篇幅有 4k 多字,货有点干,断断续续写了好几天,希望对大家有帮助.不出意外地话,今后会陆续更新 Re ...
- PB各对象常用事件
1.window中的事件 事件名 触发的时机 01.Activate 在窗口激活之前触发 02.Clicked 当用户用 ...
- Linux:删除一个目录下的所有文件,但保留一个指定文件
面试题:删除一个目录下的所有文件,但保留一个指定文件 解答: 假设这个目录是/xx/,里面有file1,file2,file3..file10 十个文件 [root@oldboy xx]# touc ...
- [JZOJ100026]图--倍增
[JZOJ100026]图--倍增 题目链接 太懒了,自行搜索 分析 裸倍增,不多说 \(fa[i][j]\)表示\(i\)跳\(2^j\)步走到的点 \(f[i][j]\)表示\(i\)跳\(2^j ...
- 【opencv 源码剖析】 四、 Mat的赋值构造函数 和 拷贝构造函数
1.赋值构造函数 右值引用 inline Mat& Mat::operator = (Mat&& m) { if (this == &m) return *this; ...