传送门

整体二分

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

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

具体细节看代码好了

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

 //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. double 与0比较时有个精度问题,有时需精确到小数点后面几位,例如与>0.0001,而不能与>0比较

    double 与0比较时有个精度问题,有时需精确到小数点后面几位,例如与>0.0001,而不能与>0比较 例如杭电1408 盐水的故事 ac #include<iostream> ...

  2. 《Effective C++》学习笔记(一)

    1.const成员函数不能更改成员变量 #include <bits/stdc++.h> using namespace std; class CtextBlock { public: s ...

  3. 动态调试smali代码学习记录

    预备知识 DDMS Dalvik Debug Monitor Serivce,Dalvik调试监控服务,为Android SDK提供的一款拥有监控Dalvik虚拟机的调试软件,启动文件位于<An ...

  4. 浏览器全屏的JS代码实现

    方法一:该方法是从一个网上的效果看到不错,然后自己就拿来下来实验了一下,还是比较满意度,下面直接给出代码 <!DOCTYPE HTML> <html lang="en-US ...

  5. 如何得到DataTable的列名

    foreach (DataColumn dc in dtfood.Columns) { string lm = dc.ColumnName; }

  6. Python:struct模块的pack、unpack

    mport struct pack.unpack.pack_into.unpack_from 1 # ref: http://blog.csdn<a href="http://lib. ...

  7. arm-linux-3.4.2移植for2440

    ----------------------------2440 上内核3.4.2移植------------------------ PS:因wifi项目中无wifi驱动,需新内核. 1.首先在内核 ...

  8. man syslog | col -b > syslog.txt

    linux man手册导出,解决man乱码 man syslog | col -b > syslog.txt

  9. vs2015类中方法前的引用链接不显示的解决方案

    在工具→选项,打开如下界面,寻找“文本编辑器→所有语言”中设置显示:&lt;img data-rawheight="761" data-rawwidth="130 ...

  10. sharepoint SDDL 字符串包含无效的SID或无法转换的SID

    安装过程中出现以下错误 采用独立模式安装Sharepoint Server 2013/Foundation 2013,在进行配置向导的时候会碰到这样的错误 System.ArgumentExcepti ...