传送门

整体二分

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

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

具体细节看代码好了

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

 //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. NFL原则告诉我们做决策的时候,试图找到一个能解决所有问题,“大而全”的方案是不存在的。我们应当找到最关心的问题,因地制宜做出选择。——聚焦目标,取舍有道!

    资源匮乏原则:有限的资源无法满足无穷的需要及欲望:因此想要多一点的某件东西,意味着必须放弃一些其他的东西:因为资源匮乏,所以我们必须做出选择. NFL原则:没有免费午餐定理(No Free Lunch ...

  2. JavaUtil_07_HttpUtil_使用Hutool 封装的 HttpUtil

    二.参考资料 1.[Hutool]Hutool工具类之Http工具——HttpUtil

  3. pyqt5信号与槽2

    信号和槽与类的属性和方法在层次上是相同的,同属与一个类的特征. 信号的定义由工厂函数生成: signal=PyQt5.QtCore.pyqtSignal(types[, name[, result[, ...

  4. 搭建JavaEE项目是遇到的几个问题

    问题描述:无法读取spring mvc的xsd文件 参考http://eric-yan.iteye.com/blog/1908470 schema_reference.4: Failed to rea ...

  5. BZOJ5314: [Jsoi2018]潜入行动

    BZOJ5314: [Jsoi2018]潜入行动 https://lydsy.com/JudgeOnline/problem.php?id=5314 分析: 裸树形背包,设\(f[x][i][0/1] ...

  6. spark提交异常日志分析

    java.lang.NoSuchMethodError: org.apache.spark.sql.SQLContext.sql(Ljava/lang/String;)Lorg/apache/spar ...

  7. HDU4699:Editor

    浅谈栈:https://www.cnblogs.com/AKMer/p/10278222.html 题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=46 ...

  8. bzoj 4372 烁烁的游戏 —— 动态点分治+树状数组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4372 本以为和 bzoj3730 一样,可以直接双倍经验了: 但要注意一下,树状数组不能查询 ...

  9. Azure上部署Barracuda WAF集群 --- 1

    公有云上的第一层防护,一般要采用Proxy模式的安全设备. 梭子鱼的WAF是最早支持Azure China公有云的安全设备. 本文记录了在Azure上安装部署Barracuda的过程.下面就是安装部署 ...

  10. 在重命名SqlServer数据库时,报5030错误的解决办法

    数据库不能重名名5030的错误,其实很简单原因就是有应用程序正在占用这个连接,使用这样一行命令就可以查询出正在占用的连接 use master select spid from master.dbo. ...