洛谷P3527 MET-Meteors [POI2011] 整体二分
正解:整体二分
解题报告:
传送门! 还有个双倍经验!(明明是一样的题目为什么你们一个紫一个黑啊喂!
这题首先要想到可以二分嘛,然后看到多组询问肯定就整体二分鸭
那就是基本套路啊,发现是区间修改单点查询,于是就树状数组前缀和维护一波,就差不多辣
其实是个板子题,只是刚学整体二分所以还是写下题解QwQ
然后有几个细节分别港下
第一个是注意到它是个环形的,所以在update的时候记得分情况讨论一下
第二个是关于判断NIE,可以在最后增加一次流星雨,保证这次流星雨之后一定所有国家都能得到足够的流星,输出的时候判断一下就好
最后一个是比较重要的,我发现好几篇题解都被hack辣,,,就是第11个点,如果WA辣,应该就是这个问题,大概港下
首先从数据范围可以发现其实它是可以溢出的,就是假如有3e5场流星雨,每场提供1e9的流星,那在查询的时候就会炸longlong
但是看到它的需求也是<=1e9的,所以可以在算的时候判断一下,如果得到的已经大于1e9就可以直接break辣,只要加一句话就好QwQ
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define rg register
#define gc getchar()
#define ll long long
#define lowbit(x) (x&(-x))
#define rp(i,x,y) for(rg ll i=x;i<=y;++i) const ll N=3e5+,inf=1e9+;
ll n,m,q,as[N],bst[N];
vector<ll>bl[N];
struct node{ll l,r,dat;}quest[N];
struct nd{ll nd,id;}p[N],tmp_l[N],tmp_r[N]; il ll read()
{
rg char ch=gc;rg ll x=;rg bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il void updat(ll x,ll dat){while(x<=m)bst[x]+=dat,x+=lowbit(x);}
il ll query(ll x){ll ret=;while(x)ret+=bst[x],x-=lowbit(x);return ret;}
void solv(ll ct_l,ll ct_r,ll as_l,ll as_r)
{
if(ct_l>ct_r)return;
if(as_l==as_r){rp(i,ct_l,ct_r)as[p[i].id]=as_l;return;}
ll mid=(as_l+as_r)>>,cnt_l=,cnt_r=;
rp(i,as_l,mid)
if(quest[i].l<=quest[i].r)updat(quest[i].l,quest[i].dat),updat(quest[i].r+,-quest[i].dat);
else updat(,quest[i].dat),updat(quest[i].r+,-quest[i].dat),updat(quest[i].l,quest[i].dat);
rp(i,ct_l,ct_r)
{
ll ret=,sz=bl[p[i].id].size();
rp(j,,sz-){ret+=query(bl[p[i].id][j]);if(ret>inf)break;}
if(ret>=p[i].nd)tmp_l[++cnt_l]=p[i];else p[i].nd-=ret,tmp_r[++cnt_r]=p[i];
}
rp(i,as_l,mid)
if(quest[i].l<=quest[i].r)updat(quest[i].l,-quest[i].dat),updat(quest[i].r+,quest[i].dat);
else updat(,-quest[i].dat),updat(quest[i].r+,quest[i].dat),updat(quest[i].l,-quest[i].dat);
rp(i,ct_l,ct_l+cnt_l-)p[i]=tmp_l[i-ct_l+];rp(i,ct_l+cnt_l,ct_r)p[i]=tmp_r[i-cnt_l-ct_l+];
solv(ct_l,ct_l+cnt_l-,as_l,mid);solv(ct_l+cnt_l,ct_r,mid+,as_r);
} int main()
{
n=read();m=read();rp(i,,m)bl[read()].push_back(i);rp(i,,n)p[i]=(nd){read(),i};q=read();rp(i,,q)quest[i].l=read(),quest[i].r=read(),quest[i].dat=read();quest[q+]=(node){,m,1e9};
solv(,n,,q+);rp(i,,n)if(as[i]!=q+)printf("%lld\n",as[i]);else printf("NIE\n");
return ;
}
洛谷P3527 MET-Meteors [POI2011] 整体二分的更多相关文章
- 洛谷P3242 接水果 [HNOI2015] 整体二分
正解:整体二分+树状数组 解题报告: 传送门! 题目还是大概解释下?虽然其实是看得懂的来着,,, 大概就是说给一棵树.给定一些询问,每个询问都是说在两个点之间的路径上的子路径的第k大是什么 然后看到这 ...
- 洛谷P3250 [HNOI2016]网络(整体二分+树状数组+树剖)
传送门 据说正解是树剖套堆???然而代码看着稍微有那么一点点长…… 考虑一下整体二分,设当前二分到的答案为$mid$,如果所有大于$mid$的边都经过当前点$x$,那么此时$x$的答案必定小于等于$m ...
- 洛谷P3527 [POI2011]MET-Meteors [整体二分]
题目传送门 Meteors 格式难调,题面就不妨放了. 分析: 一道整体二分的练手题. 就是一般的整体二分的套路,但是要注意,将修改和询问加入队列的时候要先加修改再加询问.另外,博主代码打得太丑,常数 ...
- 洛谷P3527 [POI2011]MET-Meteors(整体二分)
传送门 整体二分 先二分一个答案,判断是否可行,把可行的全都扔到左边,不可行的扔到右边 判断是否可行用树状数组就行 具体细节看代码好了 整体二分细节真多……也可能是我大脑已经退化了? //minamo ...
- [洛谷P3527] [POI2011]MET-Meteors
洛谷题目链接:[POI2011]MET-Meteors 题意翻译 Byteotian Interstellar Union有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1 ...
- 洛谷 P3527 [POI2011]MET-Meteors 解题报告
P3527 [POI2011]MET-Meteors 题意翻译 \(\tt{Byteotian \ Interstellar \ Union}\)有\(N\)个成员国.现在它发现了一颗新的星球,这颗星 ...
- BZOJ 2527 [Poi2011]Meteors(整体二分)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2527 [题目大意] 有N个成员国.现在它发现了一颗新的星球, 这颗星球的轨道被分为M份 ...
- BZOJ 2527 [Poi2011]Meteors:整体二分
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2527 题意: 有n个国家和m个空间站,每个空间站都属于一个国家,一个国家可以有多个空间站, ...
- BZOJ2527 [Poi2011]Meteors 【整体二分 + 树状数组】
题目 Byteotian Interstellar Union有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站. 这个星球经常会下 ...
随机推荐
- 【权限维持】window服务端常见后门技术
0x00 前言 未知攻焉知防,攻击者在获取服务器权限后,通常会用一些后门技术来维持服务器权限,服务器一旦被植入后门,攻击者如入无人之境.这里整理一些window服务端常见的后门技术,了解攻击者的常见后 ...
- 执行RF设置顶级测试套件的名称
场景1:通过pybot进行单个output文件情况下设置 -N --name name 设置顶级测试套件的名称.名称中的下划线将转换为空格. 默认名称为执行的数据源的名称. 场景2:通过rebot进行 ...
- Nginx(九)-- Nginx实际使用配置
1.由于在nginx中需要配置很多东西,就会使得nginx.conf配置文件过于臃肿,所以我们会将配置文件合理的切分.大体的配置依然在nginx.conf中,其他的配置会放在etc下面的目录中. 2. ...
- Ruby Tutorial
http://www.tutorialspoint.com/ruby/ruby_quick_guide.htm http://www.cnblogs.com/PurpleCow/archive/201 ...
- Selenium 选项卡管理
什么是选项卡: from selenium import webdriver browser = webdriver.Chrome() browser.get("http://www.bai ...
- CMS4.0——后知后觉
前言: 2016年底,自己作为参与者加入CMS3.0的改版中:2017年中,CMS4.0在经过一个月有余的时间,华丽丽的蜕变成现在大家喜闻乐见的:http://news.gangguwang.com/ ...
- VMware Workstation 14 黑屏的一个解决办法
近期很多朋友遇到了VMware Workstation 14开启或新建虚拟机后黑屏的现象,同时发现如果挂起虚拟机,可以显示挂起前最后的画面.显然,虚拟机核心是正常工作的,只是“显示”方面出现了问题. ...
- 一种新型聚类算法(Clustering by fast search and find of density peaksd)
最近在学习论文的时候发现了在science上发表的关于新型的基于密度的聚类算法 Kmean算法有很多不足的地方,比如k值的确定,初始结点选择,而且还不能检测费球面类别的数据分布,对于第二个问题,提出了 ...
- JS案例 - 基于vue的移动端长按手势
================================惯例碎碎念前言================================ 当时首先想到要做长按事件的时候,我想到的是vue内部的自 ...
- Android进程和线程(Android开发指南--译)
(转自:http://www.cnblogs.com/xitang/archive/2011/09/24/2189460.html) Processes and Threads 译者署名: 呆呆大虾 ...