给每个国家建一个链表,这样分治过程中的复杂度就和序列长度线形相关了,无脑套整体二分就可以。

(最坑的地方是如果所有位置都是一个国家,那么它的样本个数会爆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 整体二分的更多相关文章

  1. BZOJ 2527 [Poi2011]Meteors (整体二分+树状数组)

    整体二分板题,没啥好讲的-注意是个环-还有所有贡献会爆longlong,那么只要在加之前判断一下有没有达到需要的值就行了- CODE #include <set> #include < ...

  2. 2527: [Poi2011]Meteors[整体二分]

    2527: [Poi2011]Meteors Time Limit: 60 Sec  Memory Limit: 128 MB Submit: 1528  Solved: 556 [Submit][S ...

  3. BZOJ.2527.[POI2011]MET-Meteors(整体二分)

    题目链接 BZOJ 洛谷 每个国家的答案可以二分+求前缀和,于是可以想到整体二分. 在每次Solve()中要更新所有国家得到的值,不同位置的空间站对应不同国家比较麻烦. 注意到每次Solve()其国家 ...

  4. BZOJ 2527 [POI2011]MET-Meteors (整体二分+树状数组)

    题目大意:略 洛谷传送门 整体二分裸题 考虑只有一个国家的情况如何处理 对询问数量二分答案,暴力$O(m)$打差分,求前缀和验证,时间是$O(mlogK)$ 如果有$n$个国家,就是$O(nmlogK ...

  5. BZOJ 2527 [Poi2011]Meteors(整体二分)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2527 [题目大意] 有N个成员国.现在它发现了一颗新的星球, 这颗星球的轨道被分为M份 ...

  6. BZOJ 2527 [Poi2011]Meteors:整体二分

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2527 题意: 有n个国家和m个空间站,每个空间站都属于一个国家,一个国家可以有多个空间站, ...

  7. 【BZOJ2527】[Poi2011]Meteors 整体二分

    [BZOJ2527][Poi2011]Meteors Description Byteotian Interstellar Union (BIU) has recently discovered a ...

  8. BZOJ2527[Poi2011]Meteors——整体二分+树状数组

    题目描述 Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby galaxy. The ...

  9. BZOJ2527 [Poi2011]Meteors 整体二分 树状数组

    原文链接http://www.cnblogs.com/zhouzhendong/p/8686460.html 题目传送门 - BZOJ2527 题意 有$n$个国家. 太空里有$m$个太空站排成一个圆 ...

随机推荐

  1. TabLayout和ViewPager简单实现页卡的滑动

    首先需要在当前的module中的build Gradle的 dependencies中加入以下句子 compile 'com.android.support:design:23.0.1' 因为我们用到 ...

  2. [C#6] 5-自动属性增强

    0. 目录 C#6 新增特性目录 1. 老版本代码 internal class Person { public string Name { get; private set; } public in ...

  3. 细说ASP.NET Forms身份认证

    阅读目录 开始 ASP.NET身份认证基础 ASP.NET身份认证过程 如何实现登录与注销 保护受限制的页面 登录页不能正常显示的问题 认识Forms身份认证 理解Forms身份认证 实现自定义的身份 ...

  4. python-list tuple dict set

    1:删除一个列表末尾的元素 pop方法 >>> a [1, 'Jack', 2, 3, 2] >>> a.pop() >>> a [1, 'Jac ...

  5. linux 学习随笔-shell基础知识

    1:用户的shell历史命令保存在home/username/.bash_history中 #!!  执行用户的上一条命令 #!pw  执行命令历史中最近一次以pw开头的命令 2:'*'来匹配零或多个 ...

  6. Java中的Atomic包

    Atomic包的作用 方便程序员在多线程环境下,无锁的进行原子操作 Atomic包核心 Atomic包里的类基本都是使用Unsafe实现的包装类,核心操作是CAS原子操作: 关于CAS compare ...

  7. js自动完成

    源代码来自于: http://down.51cto.com/data/921955  我做了一下修改. 要做一个自动完成的功能,又不想依赖一大堆的js脚本库,我要的是定制的,代码尽可能简洁,方便修改和 ...

  8. Java 流(Stream)、文件(File)和IO

    Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多种格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序 ...

  9. 用tpcc测试对比 innodb 和 tokudb

    测试环境 1台IBM Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz,内存12G cd tpcc/tpcc-mysql/src # make cc lo ...

  10. 如何快速简单上传类库到CocoaPods - 图文攻略步骤

    当自己的库已经上传GitHub后,那么如何快速简单的开源自己的库呢? 这里就是介绍如何将自己的类库上传到pods管理库,以便开源所有人都能方便使用. 准备前提: - 项目已上传到GitHub (注意, ...