洛谷 P3527 [POI2011]MET-Meteors 解题报告
P3527 [POI2011]MET-Meteors
题意翻译
\(\tt{Byteotian \ Interstellar \ Union}\)有\(N\)个成员国。现在它发现了一颗新的星球,这颗星球的轨道被分为\(M\)份(第\(M\)份和第\(1\)份相邻),第\(i\)份上有第\(A_i\)个国家的太空站。 这个星球经常会下陨石雨。\(\tt{BIU}\)已经预测了接下来\(K\)场陨石雨的情况。 \(\tt{BIU}\)的第\(i\)个成员国希望能够收集\(P_i\)单位的陨石样本。你的任务是判断对于每个国家,它需要在第几次陨石雨之后,才能收集足够的陨石。
输入
第一行是两个数\(N\),\(M\)。 第二行有\(M\)个数,第\(i\)个数\(O_i\)表示第\(i\)段轨道上有第\(O_i\)个国家的太空站。 第三行有\(N\)个数,第\(i\)个数\(P_i\)表示第\(i\)个国家希望收集的陨石数量。 第四行有一个数\(K\),表示\(\tt{BIU}\)预测了接下来的\(K\)场陨石雨。 接下来\(K\)行,每行有三个数\(L_i,R_i,A_i\),表示第\(K\)场陨石雨的发生地点在从\(L_i\)顺时针到\(R_i\)的区间中(如果\(L_i \le R_i\),就是\(L_i,L_{i+1},\dots,R_i\),否则就是\(R_i,R_{i+1},\dots,m-1,m,1,\dots,L_i\)),向区间中的每个太空站提供\(A_i\)单位的陨石样本。
输出
\(N\)行。第\(i\)行的数\(W_i\)表示第\(i\)个国家在第\(W_i\)波陨石雨之后能够收集到足够的陨石样本。如果到第\(K\)波结束后仍然收集不到,输出\(NIE\)。
数据范围:
\(1\le n,m,k\le 3\times 10^5,1\le Pi\le 10^9,1\le Ai<10^9\)
整体二分,按时间二分陨石雨,划分一下国家。树状数组维护区间加单点查就行。
注意可能爆\(\tt{long \ long}\),边读边看多没多
Code:
// luogu-judger-enable-o2
#include <cstdio>
#include <vector>
#include <cctype>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
const int N=3e5+10;
ll read()
{
ll x=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)){x=x*10+c-'0';c=getchar();}
return x;
}
struct Q{int k,id;std::vector <int> pos;}q[N],ql[N],qr[N];;
struct node{int l,r;ll a;}op[N];
ll s[N];int ans[N],n,m,k;
void add(int x,ll d){while(x<=m)s[x]+=d,x+=x&-x;}
ll query(int x){ll sum=0;while(x)sum+=s[x],x-=x&-x;return sum;}
void divide(int l,int r,int s,int t)
{
if(s>t) return;
if(l==r){rep(i,s,t)ans[q[i].id]=l;return;}
int mid=l+r>>1,lp=0,rp=0;
rep(i,l,mid)
{
if(op[i].l<=op[i].r) add(op[i].l,op[i].a),add(op[i].r+1,-op[i].a);
else add(1,op[i].a),add(op[i].r+1,-op[i].a),add(op[i].l,op[i].a);
}
rep(i,s,t)
{
ll c=0;
for(int j=0;j<q[i].pos.size();j++)
{
c+=query(q[i].pos[j]);
if(q[i].k<=c) {ql[++lp]=q[i];break;}
}
if(q[i].k>c)qr[++rp]=q[i],qr[rp].k-=(int)(c);
}
rep(i,l,mid)
{
if(op[i].l<=op[i].r) add(op[i].l,-op[i].a),add(op[i].r+1,op[i].a);
else add(1,-op[i].a),add(op[i].r+1,op[i].a),add(op[i].l,-op[i].a);
}
rep(i,s,s+lp-1) q[i]=ql[i+1-s];
rep(i,s+lp,t) q[i]=qr[i+1-s-lp];
divide(l,mid,s,s+lp-1),divide(mid+1,r,s+lp,t);
}
int main()
{
n=read(),m=read();
rep(i,1,m) q[read()].pos.push_back(i);
rep(i,1,n) q[i].k=read(),q[i].id=i;
k=read();
rep(i,1,k) op[i].l=read(),op[i].r=read(),op[i].a=read();
op[++k]={1,1,0};
divide(1,k,1,n);
rep(i,1,n)
{
if(ans[i]==k) puts("NIE");
else printf("%d\n",ans[i]);
}
return 0;
}
2018.11.3
洛谷 P3527 [POI2011]MET-Meteors 解题报告的更多相关文章
- 洛谷 P3521 [POI2011]ROT-Tree Rotations 解题报告
P3521 [POI2011]ROT-Tree Rotations 题意:递归给出给一棵\(n(1≤n≤200000)\)个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少. 大体 ...
- 洛谷_Cx的故事_解题报告_第四题70
1.并查集求最小生成树 Code: #include <stdio.h> #include <stdlib.h> struct node { long x,y,c; ...
- [洛谷P3527] [POI2011]MET-Meteors
洛谷题目链接:[POI2011]MET-Meteors 题意翻译 Byteotian Interstellar Union有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1 ...
- 洛谷 P2317 [HNOI2005]星际贸易 解题报告
P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...
- 洛谷 P3802 小魔女帕琪 解题报告
P3802 小魔女帕琪 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组合,从 ...
- 洛谷 P2606 [ZJOI2010]排列计数 解题报告
P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...
- 洛谷1303 A*B Problem 解题报告
洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...
- 洛谷P3527 [POI2011]MET-Meteors [整体二分]
题目传送门 Meteors 格式难调,题面就不妨放了. 分析: 一道整体二分的练手题. 就是一般的整体二分的套路,但是要注意,将修改和询问加入队列的时候要先加修改再加询问.另外,博主代码打得太丑,常数 ...
- 洛谷 P3084 [USACO13OPEN]照片Photo 解题报告
[USACO13OPEN]照片Photo 题目描述 农夫约翰决定给站在一条线上的\(N(1 \le N \le 200,000)\)头奶牛制作一张全家福照片,\(N\)头奶牛编号\(1\)到\(N\) ...
随机推荐
- Linux工作环境搭建
云主机工作环境搭建 网易云主机 需要申请弹性公网IP,不然需要OpenVPN才可以链接. 低于50块钱时,不能进行云主机创建. 更新yum源 cd /etc/yum.repos.d/ mkdir re ...
- C# 调用webserver 出现:未能从程序集“jgd3jufm, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型
一般都是 用的动态调用webserver,然后这次用的是固定的 首先 最后 实例化改接口,然后直接传值调用
- NPOI List数据源 导出excel
List数据源生成HSSFWorkbook通用方法: public class WorkBook { public static HSSFWorkbook BuildSwitchData<T&g ...
- focus如何实现事件委托
事件委托是利用事件冒泡机制的一种优化手段,如果有很多列表元素要绑定事件,那么就可以用事件委托来优化(不需要给每个元素都绑定事件).但是对于focus这种特殊的表单事件,它不会冒泡,那么又该如何实现这一 ...
- mysql索引 b+树
1.B+树基本概念 B+树的语言定义比较复杂,简单的说是为磁盘存取设计的平衡二叉树 网上经典图,黄色p1 p2 p3代表指针,蓝色的代表磁盘,里面包含数据项,第一层17,35,p1就代表小于17的,p ...
- UVa 1586 - Molar Mass - ACM/ICPC Seoul 2007 - C语言
关键在于判断数字是两位数还是单位数,其他部分没有难度. #include"stdio.h" #include"string.h" #include"c ...
- Python实现个性化推荐二
基于内容的推荐引擎是怎么工作的 基于内容的推荐系统,正如你的朋友和同事预期的那样,会考虑商品的实际属性,比如商品描述,商品名,价格等等.如果你以前从没接触过推荐系统,然后现在有人拿枪指着你的头,强迫你 ...
- 感知机(perceptron)
- iis 10 重新注册iis
iis 10 使用该命令 提示 版本不支持 C:\WINDOWS\system32>c:\windows\microsoft.net\framework64\v4.0.30319\aspnet_ ...
- js学习之正则表达式
js学习之正则表达式 正则表达式(英语:Regular Expression,在代码中常简写为regex.regexp或RE)使用单个字符串来描述.匹配一系列符合某个句法规则的字符串搜索模式 一:语法 ...