Luogu-3527 [POI2011]MET-Meteors
Luogu-3527 [POI2011]MET-Meteors
题面
题解
感觉和上一那道题是一个类型的,直接二分答案,用BIT维护区间加(差分)即可
代码
#include<map>
#include<queue>
#include<cmath>
#include<ctime>
#include<stack>
#include<bitset>
#include<vector>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
inline char gc(){
//static char buf[100000],*p1,*p2;
//return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
return getchar();
}
inline int read(){
int ans=0,fh=1;
char ch=gc();
while(ch<'0'||ch>'9'){if(ch=='-') fh=-1; ch=gc();}
while(ch>='0'&&ch<='9') ans=(ans<<1)+(ans<<3)+ch-'0',ch=gc();
return ans*fh;
}
const int maxn=3e5+100,inf=1e9;
int n,m,k,ql[maxn],qr[maxn],qw[maxn],b[maxn],p[maxn],ans[maxn],now;
int tmp1[maxn],tmp2[maxn];
ll tre[maxn],a[maxn];
vector<int>son[maxn];
void revise(int l,int r,int w){
for(int i=l;i<maxn;i+=i&(-i)) tre[i]+=w;
for(int i=r+1;i<maxn;i+=i&(-i)) tre[i]-=w;
}
void work(int x,int ms){
int l=ql[x],r=qr[x],w=qw[x]*ms;
if(l<=r) revise(l,r,w);
else revise(1,r,w),revise(l,m,w);
}
ll query(int x){
ll Ans=0;
for(int i=x;i;i-=i&(-i)) Ans+=tre[i];
return Ans;
}
ll check(int x){
ll Ans=0;int lim=son[x].size();
for(int i=0;i<lim;i++){
Ans+=query(son[x][i]);
if(Ans>=a[x]) return 1;
}
return 0;
}
void cdq(int l,int r,int L,int R){
if(L>R) return;
if(l==r){
for(int i=L;i<=R;i++) ans[p[i]]=l;
return;
}
int mid=l+r>>1;
while(now<mid) work(++now,1);
while(now>mid) work(now--,-1);
int lc=0,rc=0,cnt=L-1;
for(int i=L;i<=R;i++)
if(check(p[i])) tmp1[++lc]=p[i];
else tmp2[++rc]=p[i];
for(int i=1;i<=lc;i++) p[++cnt]=tmp1[i];
for(int i=1;i<=rc;i++) p[++cnt]=tmp2[i];
cdq(l,mid,L,L+lc-1),cdq(mid+1,r,L+lc,R);
}
int main(){
// freopen("3527.in","r",stdin);
n=read(),m=read();
for(int i=1;i<=m;i++)
b[i]=read(),son[b[i]].push_back(i);
for(int i=1;i<=n;i++) a[i]=read(),p[i]=i;
k=read();
for(int i=1;i<=k;i++)
ql[i]=read(),qr[i]=read(),qw[i]=read();
ql[++k]=1,qr[k]=m,qw[k]=inf;
now=0,cdq(1,k,1,n);
for(int i=1;i<=n;i++)
if(ans[i]==k) printf("NIE\n");
else printf("%d\n",ans[i]);
return 0;
}
Luogu-3527 [POI2011]MET-Meteors的更多相关文章
- 「POI2011」Meteors
「POI2011」Meteors 传送门 整体二分,树状数组实现区间修改单点查询,然后注意修改是在环上的. 参考代码: #include <cstdio> #include <vec ...
- 【BZOJ】【2527】【POI2011】Meteors
整体二分+树状数组 整体二分……感谢zyf提供的入门题 简单粗暴的做法:枚举每一个国家,二分他的$w_i$,然后计算……然而这样效率很低…… 整体二分就是:对所有的国家一起进行二分,$w_i$在mid ...
- 【BZOJ2527】【POI2011】Meteors [整体二分]
Meteors Time Limit: 60 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 这个星球经常会下陨石雨.BI ...
- Luogu P3521 [POI2011]ROT-Tree Rotations
题目链接 \(Click\) \(Here\) 线段树合并,没想到学起来意外的很简单,一般合并权值线段树. 建树方法和主席树一致,即动态开点.合并方法类似于\(FHQ\)的合并,就是把两棵树的信息整合 ...
- luogu P3522 [POI2011]TEM-Temperature
这道题暴力做法就是枚举每个起点,然后向后拓展到不能拓展 就像这样(红框是每个位置的取值范围,绿线是你取的值构成的折线) 应该可以发现,左端点往右移的过程中,右端点也只能不动或往右移,所以我们可以每次移 ...
- Luogu 3521 [POI2011]ROT-Tree Rotations
BZOJ 2212 从下到上线段树合并. 考虑到每一个子树内部产生的贡献不可能通过换儿子消除,所以一次更换只要看看把哪个儿子放在左边产生的逆序对数少就可以了. 逆序对数可以在线段树合并的时候顺便算出来 ...
- Luogu P3527 [POI2011]MET-Meteors 整体二分
思路:整体二分 提交:4次 错因:树状数组开的$int$ 题解: 二分操作序列,将仅用$[l,md]$即可满足要求的国家递归到左半边,将仅用$[l,md]$不能满足要求的国家,把他们的要求去掉左半边的 ...
- Luogu P3520 [POI2011]SMI-Garbage
题目 把要变边权的边拿出来找欧拉回路就行了.正确性显然,因为一条边经过两次相当于对欧拉回路度数的奇偶性没有影响. 然后把一个个小环输出即可,具体的我也不知道怎么输,题目没讲清楚,我按着题解的来的. # ...
- 【BZOJ】【2738】&【Tsinsen】【A1333】矩阵乘法
整体二分+树状数组 过了[BZOJ][2527][POI2011]Meteors以后这题就没那么难啦~ 关键是[从小到大]依次插入数字,然后整体二分每个查询的第k大是在第几次插入中被插入的……嗯大概就 ...
- BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解
+++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...
随机推荐
- Linux增加swap分区的方法
在装完Linux系统之后,建立Swap分区有两种方法. 1.新建磁盘分区作为swap分区2.用文件作为swap分区 (操作更简单,我更常用) 一.新建磁盘分区作为swap分区 1. # swapoff ...
- FineReport---函数
1.NUMTO()需要将数字2345转换成二三四五:NUMTO(2345) 2.Toimage函数:Toimage(path)用于在报表中显示某一路径path下的图片 3.row():为获取当前行号 ...
- 白话Redis分布式锁
redis分布式 简单来说就是,操作redis实例时,不是常规(单机)操作一个实例,而是操作两台或多台,也就是基于分布式集群: 而且redis内部是单进程.单线程,是数据安全的(只有自己的线程在操作数 ...
- django-admin详细设置
Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制.以下是我最近摸索总结出比较实用的配置.若你有什么比较好的配置 ...
- Python高级教程-高阶函数
Higher-order function(高阶函数) 变量可以指向函数 以Python内置的求绝对值的函数abs()为例,调用该函数用以下代码: >>> abs(-10) 10 但 ...
- Java集合类学习记录
被标记为transient的属性在对象被序列化的时候不会被保存int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = Arrays.copyOf(arr1, new_le ...
- Sql server用QQ邮箱发送邮件
一.配置数据库邮件 https://jingyan.baidu.com/article/3ea51489a135f752e71bba5b.html
- Redis四(Set操作)
1.Set操作 Set集合就是不允许重复的列表 集合操作(无序) sadd(name,values) 1 # name对应的集合中添加元素 scard(name) 1 获取name对应的集合中元素个数 ...
- Flume1.7.0的安装与使用
Flume下载后,解压,新增一个配置文件,写入配置即可 我将配置文件写在 conf 下,取名为 flume-conf-spooldir.properties Flume 运行命令: bin/flume ...
- $python打包工具pyinstaller的用法
pyinstaller是一个很好用的python打包工具,在Windows环境下可以将python脚本打包成一个exe可执行文件,并且脚本中所依赖的各种第三方库在打包时候都会被统一处理到一起,这样打包 ...