P3527 [POI2011]MET-Meteors

链接

  整体二分!

代码

 #include<bits/stdc++.h>
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for (;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ;
int Ans[N],A[N],B1[N],B2[N],T[N];
vector <int> v[N];
struct OPT{
int l,r,val;
}OP[N]; struct BIT{
int n;
LL sum[N];
inline void update(int l,int r,int v) {
for (int p=l; p<=n; p+=p&(-p)) sum[p] += v;
for (int p=r+; p<=n; p+=p&(-p)) sum[p] -= v;
if (l > r) for (int p=; p<=n; p+=p&(-p)) sum[p] += v;
}
inline LL query(int p) { // LL
LL ans = ;
for (; p; p-=p&(-p)) ans += sum[p];
return ans;
}
inline void clear(int l,int r) {
for (int p=l; p<=n&&sum[p]; p+=p&(-p)) sum[p] = ;
for (int p=r+; p<=n&&sum[p]; p+=p&(-p)) sum[p] = ;
if (l > r) for (int p=; p<=n&&sum[p]; p+=p&(-p)) sum[p] = ;
}
}bit; void solve(int Head,int Tail,int L,int R) { // 询问的队列(即国家)[Head,Tail],答案[L,R]次之间
if (Head > Tail) return;
if (L == R) {
for (int i=Head; i<=Tail; ++i) Ans[A[i]] = L;
return;
}
int M = (L + R) / ,p1 = ,p2 = ;
for (int i=L; i<=M; ++i)
bit.update(OP[i].l,OP[i].r,OP[i].val);
for (int i=Head; i<=Tail; ++i) {
int now = A[i]; // 国家
LL sum = ;
for (int j=,lim=v[now].size(); j<lim; ++j)
if ((sum += bit.query(v[now][j])) >= T[now]) break;;
if (sum >= T[now]) B1[++p1] = A[i];
else T[now] -= sum,B2[++p2] = A[i];
}
for (int i=L; i<=M; ++i) bit.clear(OP[i].l,OP[i].r);
for (int i=; i<=p1; ++i) A[Head+i-] = B1[i];
for (int i=; i<=p2; ++i) A[Head+p1+i-] = B2[i];
solve(Head,Head+p1-,L,M);
solve(Head+p1,Tail,M+,R);
} int main() {
int n,m,k;
n = read();
bit.n = m = read();
for (int i=; i<=m; ++i) v[read()].push_back(i); // 第read()个国家的空间站i
for (int i=; i<=n; ++i) T[i] = read(),A[i] = i;
k = read();
for (int i=; i<=k; ++i)
OP[i].l = read(),OP[i].r = read(),OP[i].val = read();
OP[++k] = (OPT){m+,m+,}; // 特判不行的情况 solve(,n,,k);
for (int i=; i<=n; ++i) printf(Ans[i]==k?"NIE\n":"%d\n",Ans[i]);
return ;
}

P3527 [POI2011]MET-Meteors的更多相关文章

  1. 洛谷 P3527 [POI2011]MET-Meteors 解题报告

    P3527 [POI2011]MET-Meteors 题意翻译 \(\tt{Byteotian \ Interstellar \ Union}\)有\(N\)个成员国.现在它发现了一颗新的星球,这颗星 ...

  2. 「POI2011」Meteors

    「POI2011」Meteors 传送门 整体二分,树状数组实现区间修改单点查询,然后注意修改是在环上的. 参考代码: #include <cstdio> #include <vec ...

  3. 洛谷P3527 [POI2011]MET-Meteors [整体二分]

    题目传送门 Meteors 格式难调,题面就不妨放了. 分析: 一道整体二分的练手题. 就是一般的整体二分的套路,但是要注意,将修改和询问加入队列的时候要先加修改再加询问.另外,博主代码打得太丑,常数 ...

  4. 【BZOJ】【2527】【POI2011】Meteors

    整体二分+树状数组 整体二分……感谢zyf提供的入门题 简单粗暴的做法:枚举每一个国家,二分他的$w_i$,然后计算……然而这样效率很低…… 整体二分就是:对所有的国家一起进行二分,$w_i$在mid ...

  5. [洛谷P3527] [POI2011]MET-Meteors

    洛谷题目链接:[POI2011]MET-Meteors 题意翻译 Byteotian Interstellar Union有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1 ...

  6. 【BZOJ2527】【POI2011】Meteors [整体二分]

    Meteors Time Limit: 60 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 这个星球经常会下陨石雨.BI ...

  7. 洛谷P3527 [POI2011]MET-Meteors(整体二分)

    传送门 整体二分 先二分一个答案,判断是否可行,把可行的全都扔到左边,不可行的扔到右边 判断是否可行用树状数组就行 具体细节看代码好了 整体二分细节真多……也可能是我大脑已经退化了? //minamo ...

  8. Luogu P3527 [POI2011]MET-Meteors 整体二分

    思路:整体二分 提交:4次 错因:树状数组开的$int$ 题解: 二分操作序列,将仅用$[l,md]$即可满足要求的国家递归到左半边,将仅用$[l,md]$不能满足要求的国家,把他们的要求去掉左半边的 ...

  9. 【BZOJ】【2738】&【Tsinsen】【A1333】矩阵乘法

    整体二分+树状数组 过了[BZOJ][2527][POI2011]Meteors以后这题就没那么难啦~ 关键是[从小到大]依次插入数字,然后整体二分每个查询的第k大是在第几次插入中被插入的……嗯大概就 ...

随机推荐

  1. Android(java)学习笔记2:继承Thread类创建线程类

    1. 继承Thread类 创建线程类: package cn.itcast_02; /* * 该类要重写run()方法,为什么呢? * 不是类中的所有代码都需要被线程执行的. * 而这个时候,为了区分 ...

  2. 类型系统(type system)是一门编程语言最核心也是最基础的部分---编程语言最终的目标,本质上无非是回答两个问题:如何表示信息、如何处理信息

    https://www.cnblogs.com/feng9exe/p/9712059.html 类型系统(type system)是一门编程语言最核心也是最基础的部分.无论该语言基于何种编程范式,都必 ...

  3. Android——Intent,Bundle

    Intent——切换activity intent.setClass(first.this,second.class); startActivity(intent); Bundle——切换时数据传递 ...

  4. VMWARE下CentOS7虚拟机网络配置

    注:本文仅针对新装的虚拟机,#ip addr 获取不到ip信息,无法连接网络的情况提供一种参考解决方案. 1.左上角点击“编辑”->“虚拟网络编辑器”.新建一个NAT模式的网络. 2.配置虚拟机 ...

  5. RabbitMQ .NET Client 实战实验

    由于公司业务需求,最近想上RabbitMQ,之前我研究了一段时间微软的MSMQ.开源队列有很多,各有优劣.就先拿RabbitMQ练练手吧.本篇着重代码部分,至于怎么安装,怎么配置不在赘述.而且代码是在 ...

  6. ES6学习笔记(对象)

    1.属性的简洁表示法 const foo = 'bar'; const baz = {foo}; baz // {foo: "bar"} // 等同于 const baz = {f ...

  7. json sort

    Array.sort()方法是用来对数组项进行排序的 ,默认情况下是进行升序排列.sort() 方法可以接受一个 方法为参数. sort()排序时每次比较两个数组项都回执行这个参数,并把两个比较的数组 ...

  8. android 多线程 异步消息处理 服务 学习笔记 (六)

    三种多线程编程方法 1 class Mythread extends Thread{ @Override public void run(){} } new Mythread().start() 2 ...

  9. android 省市区三级联动

    最近项目,需要用到三级联动,在网上找了一些例子,进行了修改,实现,提炼出来了给大家分享 实现思路是在三个wheelview 进行联动.选择了省,马上就关联到市和区,选择了市 ,马上就可以关联到区. 效 ...

  10. UDP端口启动后一段时间无法接收到数据

    接口需求:开发一个UDP协议的接口作为服务端接收来自客户端的认证数据,数据量每分钟7w+条; 数据格式:标准的redius协议,redius协议的相关知识在网上查资料,提供线索:http://blog ...