bzoj 2527: [Poi2011]Meteors 整体二分
给每个国家建一个链表,这样分治过程中的复杂度就和序列长度线形相关了,无脑套整体二分就可以。
(最坑的地方是如果所有位置都是一个国家,那么它的样本个数会爆longlong!!被这个坑了一次,大于p[i]的时候break就行了)。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define N 300005
#define int long long
using namespace std;
int n,m,k;
vector<int>a[N];
int c[N];
void add(int x,int y)
{
for(int i=x;i<=m;i+=(i&(-i)))
{
c[i]+=y;
}
}
int qur(int x)
{
int ans=;
for(int i=x;i;i-=(i&(-i)))
{
ans+=c[i];
}
return ans;
}
int q[N];
int p[N];
struct node
{
int l,r,z;
}op[N];
int ans[N];
int tmp[][N];
void solve(int L,int R,int l,int r)
{
if(L>R)return ;
if(l==r)
{
for(int i=L;i<=R;i++)
{
ans[q[i]]=l;
}
return ;
}
int mid=(l+r)>>;
int cnt1=,cnt2=;
for(int i=l;i<=mid;i++)
{
if(op[i].l<=op[i].r)
{
add(op[i].l,op[i].z);add(op[i].r+,-op[i].z);
}
else
{
add(,op[i].z);add(op[i].r+,-op[i].z);add(op[i].l,op[i].z);
}
}
for(int i=L;i<=R;i++)
{
int tp=;
for(int j=;j<a[q[i]].size();j++)
{
tp+=qur(a[q[i]][j]);
if(tp>=p[q[i]])break;
}
if(tp>=p[q[i]])tmp[][++cnt1]=q[i];
else p[q[i]]-=tp,tmp[][++cnt2]=q[i];
}
for(int i=l;i<=mid;i++)
{
if(op[i].l<=op[i].r)
{
add(op[i].l,-op[i].z);add(op[i].r+,op[i].z);
}
else
{
add(,-op[i].z);add(op[i].r+,op[i].z);add(op[i].l,-op[i].z);
}
}
int l1=L+cnt1-;
for(int i=;i<=cnt1;i++)q[L+i-]=tmp[][i];
for(int i=;i<=cnt2;i++)q[l1+i]=tmp[][i];
solve(L,l1,l,mid);solve(l1+,R,mid+,r);
}
signed main()
{
scanf("%lld%lld",&n,&m);
for(int i=;i<=m;i++)
{
int t1;scanf("%lld",&t1);
a[t1].push_back(i);
}
for(int i=;i<=n;i++)scanf("%lld",&p[i]),q[i]=i;
scanf("%lld",&k);
for(int i=;i<=k;i++)
{
scanf("%lld%lld%lld",&op[i].l,&op[i].r,&op[i].z);
}
solve(,n,,k+);
for(int i=;i<=n;i++)
{
if(ans[i]!=k+)printf("%lld\n",ans[i]);
else puts("NIE");
}
return ;
}
bzoj 2527: [Poi2011]Meteors 整体二分的更多相关文章
- BZOJ 2527 [Poi2011]Meteors (整体二分+树状数组)
整体二分板题,没啥好讲的-注意是个环-还有所有贡献会爆longlong,那么只要在加之前判断一下有没有达到需要的值就行了- CODE #include <set> #include < ...
- 2527: [Poi2011]Meteors[整体二分]
2527: [Poi2011]Meteors Time Limit: 60 Sec Memory Limit: 128 MB Submit: 1528 Solved: 556 [Submit][S ...
- BZOJ.2527.[POI2011]MET-Meteors(整体二分)
题目链接 BZOJ 洛谷 每个国家的答案可以二分+求前缀和,于是可以想到整体二分. 在每次Solve()中要更新所有国家得到的值,不同位置的空间站对应不同国家比较麻烦. 注意到每次Solve()其国家 ...
- BZOJ 2527 [POI2011]MET-Meteors (整体二分+树状数组)
题目大意:略 洛谷传送门 整体二分裸题 考虑只有一个国家的情况如何处理 对询问数量二分答案,暴力$O(m)$打差分,求前缀和验证,时间是$O(mlogK)$ 如果有$n$个国家,就是$O(nmlogK ...
- 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 整体二分
[BZOJ2527][Poi2011]Meteors Description Byteotian Interstellar Union (BIU) has recently discovered a ...
- BZOJ2527[Poi2011]Meteors——整体二分+树状数组
题目描述 Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby galaxy. The ...
- BZOJ2527 [Poi2011]Meteors 整体二分 树状数组
原文链接http://www.cnblogs.com/zhouzhendong/p/8686460.html 题目传送门 - BZOJ2527 题意 有$n$个国家. 太空里有$m$个太空站排成一个圆 ...
随机推荐
- ButterKnife 8.2.1 大圣归来
零.前言 ButterKnife是一个视图注入的框架,主要帮我们解决无脑的findViewById.设置监听事件等等体力劳动. 一.引入 好消息是ButterKnife终于使用apt生成代码了,首先在 ...
- ORA-00604: error occurred at recursive SQL level 1
在测试环境中使用某个账号ESCMOWNER对数据库进行ALTER操作时,老是报如下错误: ORA-00604: error occurred at recursive SQL level 1 ORA- ...
- ORA-27125: unable to create shared memory segment
平台环境 : Oracle Linux Server release 5.7 x86_64 数据库版本 : Oracle Database 10g Enterprise Edition Rel ...
- Python之路:堡垒机实例
堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: 1 ...
- ubuntu系统安装软件方法
ubuntu系统安装软件方法 ubuntu下安装软件有三种方式,分别为在线安装apt-get方式,软件商店安装方式和 1. 软件商店安装方式 这种方式对经常使用windows系统的同学来说最为简单,因 ...
- 详解Python中的循环语句的用法
一.简介 Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性.须重要理解,if.while.for以及与它们相搭配的 else. elif.break.continue和pass语句 ...
- JSCH通过密钥文件进行远程访问
需求:WEB app 需要使用JSCH来通过密钥文件的方式进行SFTP/SSH访问远程LINUX机器 实现方式:假设远程机器都含有用户名为hadoop的用户,因为密码因为策略的要求密码会随时间发生变化 ...
- docker
docker pull centos docker images docker run -ti centos cat /etc/redhat-release ##################### ...
- java1.8常用的函数式接口
//常用函数式接口 final ; //num++; //第一个为传入参数的类型:第二个为返回数据的类型 Function<int[],String> function = (from) ...
- Hibernate中Java对象的三种状态
Hibernate中Java对象的三种 ...