bzoj 2527: [Poi2011]Meteors 整体二分
给每个国家建一个链表,这样分治过程中的复杂度就和序列长度线形相关了,无脑套整体二分就可以。
(最坑的地方是如果所有位置都是一个国家,那么它的样本个数会爆longlong!!被这个坑了一次,大于p[i]的时候break就行了)。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define N 300005
#define int long long
using namespace std;
int n,m,k;
vector<int>a[N];
int c[N];
void add(int x,int y)
{
for(int i=x;i<=m;i+=(i&(-i)))
{
c[i]+=y;
}
}
int qur(int x)
{
int ans=;
for(int i=x;i;i-=(i&(-i)))
{
ans+=c[i];
}
return ans;
}
int q[N];
int p[N];
struct node
{
int l,r,z;
}op[N];
int ans[N];
int tmp[][N];
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[q[i]]=l;
}
return ;
}
int mid=(l+r)>>;
int cnt1=,cnt2=;
for(int i=l;i<=mid;i++)
{
if(op[i].l<=op[i].r)
{
add(op[i].l,op[i].z);add(op[i].r+,-op[i].z);
}
else
{
add(,op[i].z);add(op[i].r+,-op[i].z);add(op[i].l,op[i].z);
}
}
for(int i=L;i<=R;i++)
{
int tp=;
for(int j=;j<a[q[i]].size();j++)
{
tp+=qur(a[q[i]][j]);
if(tp>=p[q[i]])break;
}
if(tp>=p[q[i]])tmp[][++cnt1]=q[i];
else p[q[i]]-=tp,tmp[][++cnt2]=q[i];
}
for(int i=l;i<=mid;i++)
{
if(op[i].l<=op[i].r)
{
add(op[i].l,-op[i].z);add(op[i].r+,op[i].z);
}
else
{
add(,-op[i].z);add(op[i].r+,op[i].z);add(op[i].l,-op[i].z);
}
}
int l1=L+cnt1-;
for(int i=;i<=cnt1;i++)q[L+i-]=tmp[][i];
for(int i=;i<=cnt2;i++)q[l1+i]=tmp[][i];
solve(L,l1,l,mid);solve(l1+,R,mid+,r);
}
signed main()
{
scanf("%lld%lld",&n,&m);
for(int i=;i<=m;i++)
{
int t1;scanf("%lld",&t1);
a[t1].push_back(i);
}
for(int i=;i<=n;i++)scanf("%lld",&p[i]),q[i]=i;
scanf("%lld",&k);
for(int i=;i<=k;i++)
{
scanf("%lld%lld%lld",&op[i].l,&op[i].r,&op[i].z);
}
solve(,n,,k+);
for(int i=;i<=n;i++)
{
if(ans[i]!=k+)printf("%lld\n",ans[i]);
else puts("NIE");
}
return ;
}
bzoj 2527: [Poi2011]Meteors 整体二分的更多相关文章
- BZOJ 2527 [Poi2011]Meteors (整体二分+树状数组)
整体二分板题,没啥好讲的-注意是个环-还有所有贡献会爆longlong,那么只要在加之前判断一下有没有达到需要的值就行了- CODE #include <set> #include < ...
- 2527: [Poi2011]Meteors[整体二分]
2527: [Poi2011]Meteors Time Limit: 60 Sec Memory Limit: 128 MB Submit: 1528 Solved: 556 [Submit][S ...
- BZOJ.2527.[POI2011]MET-Meteors(整体二分)
题目链接 BZOJ 洛谷 每个国家的答案可以二分+求前缀和,于是可以想到整体二分. 在每次Solve()中要更新所有国家得到的值,不同位置的空间站对应不同国家比较麻烦. 注意到每次Solve()其国家 ...
- BZOJ 2527 [POI2011]MET-Meteors (整体二分+树状数组)
题目大意:略 洛谷传送门 整体二分裸题 考虑只有一个国家的情况如何处理 对询问数量二分答案,暴力$O(m)$打差分,求前缀和验证,时间是$O(mlogK)$ 如果有$n$个国家,就是$O(nmlogK ...
- BZOJ 2527 [Poi2011]Meteors(整体二分)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2527 [题目大意] 有N个成员国.现在它发现了一颗新的星球, 这颗星球的轨道被分为M份 ...
- BZOJ 2527 [Poi2011]Meteors:整体二分
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2527 题意: 有n个国家和m个空间站,每个空间站都属于一个国家,一个国家可以有多个空间站, ...
- 【BZOJ2527】[Poi2011]Meteors 整体二分
[BZOJ2527][Poi2011]Meteors Description Byteotian Interstellar Union (BIU) has recently discovered a ...
- 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$个太空站排成一个圆 ...
随机推荐
- 常用API——字符串String型函数
上图: 声明 var myString = new String(“Every good boy does fine.”); var myString = “Every good boy does f ...
- Linux命令学习总结: file命令
命令简介: 该命令用来识别文件类型,也可用来辨别一些文件的编码格式.它是通过查看文件的头部信息来获取文件类型,而不是像Windows通过扩展名来确定文件类型的. 执行权限 :All User 指令所在 ...
- Oracle 11g 单实例安装文档
这里介绍在Red Hat Enterprise Linux Server release 5.7 (Tikanga)下安装ORACLE 11.2.0.1.0的过程,本文仅仅是为了写这样安装指导文档而整 ...
- 个人Github-欢迎交流探讨
Github annsshadow
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- 【转】去除eclipse的JS验证
第一步:去除eclipse的JS验证:将windows->preference->Java Script->Validator->Errors/Warnings->Ena ...
- Si2155
http://www.edom.com.tw/cn/index.jsp?m=prodview&id=1702 Description:新型的Si2155 电视调谐器IC扩展了Silicon L ...
- 自己第一个github开源的感受
自己在github上发布了开源<基于IOS的手机视频直播SDK>后,不到一个月,被人star了508次,fork了120次,这个成绩大大出乎了我自己的意料! github网址:https: ...
- spark1.4.1 启动过程
今天稍微没那么忙了,趁着这个时间,准备把spark的启动过程总结一下(),分享给大家.现在使用的spark1.4.1版本 当然前提是你已经把spark环境搭建好了. 1.我们启动spark的时候一般会 ...
- OAuth协议——PHP第三方登陆协议
慕课网Badguy老师的良心课程! 总会有那种什么都不想干的时候,但现在的日子又不这么允许个人的放纵,我一般就只有这几个选择:看课程视频,看书,看小说..好像还是有可以做的事情.其中,看课程视频有点无 ...