传送门

整体二分

先二分一个答案,判断是否可行,把可行的全都扔到左边,不可行的扔到右边

判断是否可行用树状数组就行

具体细节看代码好了

整体二分细节真多……也可能是我大脑已经退化了?

 //minamoto
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#define ll long long
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
inline ll read(){
#define num ch-'0'
char ch;bool flag=;ll res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
const int N=;
int n,m,k,ans[N],mb[N],st[N],top;
ll c[N];
vector<int> a[N];
struct node{
int l,r,op,id;ll k;
node(){}
node(int l,int r,int op,int id,ll k):l(l),r(r),op(op),id(id),k(k){}
}q[N],q1[N],q2[N];
inline void add(int x,ll y){
for(;x<=m;x+=x&-x){
if(!c[x]) st[++top]=x;
c[x]+=y;
}
}
ll query(int x){
ll res=;
for(;x;x-=x&-x) res+=c[x];
return res;
}
void solve(int l,int r,int ql,int qr){
if(l>r) return;
if(ql==qr){
for(int i=l;i<=r;++i)
if(q[i].op==) ans[q[i].id]=ql;
return;
}
int mid=ql+qr>>,p1=,p2=;
for(int i=l;i<=r;++i){
switch(q[i].op){
case :{
ll res=;
for(int j=,s=a[q[i].id].size();j<s;++j){
res+=query(a[q[i].id][j]);
if(res>=q[i].k) break;
}
if(res>=q[i].k) q1[++p1]=q[i];
else q[i].k-=res,q2[++p2]=q[i];
break;
}
case :{
if(q[i].id<=mid) add(q[i].l,q[i].k),add(q[i].r+,-q[i].k),q1[++p1]=q[i];
else q2[++p2]=q[i];
break;
}
case :{
if(q[i].id<=mid) add(,q[i].k),add(q[i].r+,-q[i].k),add(q[i].l,q[i].k),q1[++p1]=q[i];
else q2[++p2]=q[i];
break;
}
}
}
while(top) c[st[top--]]=;
for(int i=;i<=p1;++i) q[l+i-]=q1[i];
for(int i=;i<=p2;++i) q[l+p1+i-]=q2[i];
solve(l,l+p1-,ql,mid),solve(l+p1,r,mid+,qr);
}
int main(){
// freopen("testdata.in","r",stdin);
n=read(),m=read();
for(int i=;i<=m;++i) a[read()].push_back(i);
for(int i=;i<=n;++i) mb[i]=read();
k=read();
for(int i=,l,r,t;i<=k;++i){
l=read(),r=read(),t=read();
q[i]=node(l,r,r>=l?:,i,t);
}
for(int i=;i<=n;++i)
q[i+k]=node(,,,i,mb[i]);
solve(,k+n,,k+);
for(int i=;i<=n;++i)
(ans[i]!=k+)?printf("%d\n",ans[i]):puts("NIE");
return ;
}

洛谷P3527 [POI2011]MET-Meteors(整体二分)的更多相关文章

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

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

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

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

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

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

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

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

  5. 洛谷P3242 接水果 [HNOI2015] 整体二分

    正解:整体二分+树状数组 解题报告: 传送门! 题目还是大概解释下?虽然其实是看得懂的来着,,, 大概就是说给一棵树.给定一些询问,每个询问都是说在两个点之间的路径上的子路径的第k大是什么 然后看到这 ...

  6. 洛谷P3250 [HNOI2016]网络(整体二分+树状数组+树剖)

    传送门 据说正解是树剖套堆???然而代码看着稍微有那么一点点长…… 考虑一下整体二分,设当前二分到的答案为$mid$,如果所有大于$mid$的边都经过当前点$x$,那么此时$x$的答案必定小于等于$m ...

  7. 洛谷P3513 [POI2011]KON-Conspiracy

    洛谷P3513 [POI2011]KON-Conspiracy 题目描述 Byteotia的领土被占领了,国王Byteasar正在打算组织秘密抵抗运动. 国王需要选一些人来进行这场运动,而这些人被分为 ...

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

    正解:整体二分 解题报告: 传送门! 还有个双倍经验!(明明是一样的题目为什么你们一个紫一个黑啊喂! 这题首先要想到可以二分嘛,然后看到多组询问肯定就整体二分鸭 那就是基本套路啊,发现是区间修改单点查 ...

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

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

随机推荐

  1. Android studio导入第三方类库源码以及jar包

    新建一个Android项目,项目结构如下: 1.添加第三方类库源码 首先将第三方类库考入与app同级的目录下: 之后,在build.gradle(Moudule:app)下添加编译代码:在seting ...

  2. python UDP CS demo

    UDP Communication Contents UDP Communication Sending Receiving Using UDP for e.g. File Transfers Mul ...

  3. JavaUtil_06_HttpUtil_使用httpclient实现

    一.简介 使用 appache 的 httpclient 来实现的 二.源码 package com.ray.weixin.gz.util; import java.io.File; import j ...

  4. STL stl_alloc.h

    # // Comment By: 凝霜 # // E-mail: mdl2009@vip.qq.com # // Blog: http://blog.csdn.net/mdl13412 # # // ...

  5. JNI简易入门

    JNI简介 JNI(Java Native Interface)是JDK的一部分,提供了若干API实现了Java和其他语言的通信(主要是C/C++).JNI主要用于以下场景: 贴近硬件底层的功能,Ja ...

  6. ACM学习历程—POJ3090 Visible Lattice Points(容斥原理 || 莫比乌斯)

    Description A lattice point (x, y) in the first quadrant (x and y are integers greater than or equal ...

  7. uoj problem 10

    uoj problem 10 题目大意: 给定任务若干,每个任务在\(t_i\)收到,需要\(s_i\)秒去完成,优先级为\(p_i\) 你采用如下策略: 每一秒开始时,先收到所有在该秒出现的任务,然 ...

  8. ViewModel中C# Property自动添加OnPropertyChanged处理的小工具, 以及相应Python知识点

    在做WPFMVVM中经常会遇到一些Model.ViewModel的属性添加添加私有字段和更改通知方法来支持Binding. 比如把: public class Test {      public s ...

  9. 【转】 Pro Android学习笔记(五一):ActionBar(4):标准和Tab模式

    之前,我们学习的Action Bar是标准模式,Tab模式的如下图所示. 对于Tab,我们在Android学习笔记(二二): 多页显示-Tag的使用中学习过,但Action Bar的tab更适合fra ...

  10. 关于openstack自动化安装的一点思考

    在openstack针对具体应用的解决方案已成型之后,按照官方文档安装openstack实际上就成了一个繁琐的事情. 我有一个设想,之前实施了一点,还未成功,但是也想记录下来.最终目标:使用U盘直接部 ...