洛谷 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\) ...
随机推荐
- android学习十 ActionBar
1.api level大于等于11 支持,或者使用兼容库,但兼容库的问题很多. 2.一个操作栏属于一个活动,并具有其生命周期 3.操作栏分3类:a.选项卡操作栏,b.列表操作栏,c.标准操作栏 4.获 ...
- 一篇文章让你了解GC垃圾回收器
简单了解GC垃圾回收器 了解GC之前我们首先要了解GC是要做什么的?顾名思义回收垃圾,什么是垃圾呢? GC回收的垃圾主要指的是回收堆内存中的垃圾对象. 从根对象出发,所有被引用的对象,都是存活对象 其 ...
- Java学习 · 初识 异常机制
异常机制 1. 程序中的异常 a) b) 面对异常如何解决 i. 由开发者通过if-else来解决 代码臃肿 程序员需要花费很大精力 ii. ...
- 腾讯云ubuntu安装使用MySQL
安装步骤 ubuntu@VM---ubuntu:~$ sudo apt-get install mysql-server (密码: root/root) ubuntu@VM---ubuntu:~$ s ...
- 使用Python客户端(redis-py)连接Redis--华为云DCS for Redis使用经验
使用Python连接Redis,需要先安装Python以及redis-py,以CentOS为例,介绍redis-py的客户端环境搭建. 第0步:准备工作 华为云上购买1台弹性云服务器ECS(我选了Ce ...
- StreamSets小白踩过的一些坑
由于公司业务上的需求,需要实时监控mysql数据库的数据的增长,并将数据同步到另一个平台,所以就问老大使用什么工具比较好,老大推荐使用StreamSets,还说在测试环境都已经部署好了StreamSe ...
- C++ 普通函数和虚函数调用的区别
引出:写个类A,声明类A指针指向NULL,调用类A的方法会有什么后果,编译通过吗,运行会通过吗? #include<stdio.h> #include<iostream> us ...
- vim 删除文件全部内容
很多时候我们需要删除脚本文件全部内容, 重新再写入新的内容,进行其他的操作: 很多时候我们对应用程序的排错需要查看日志文件,然而日志中通常有许多我们以前的应用程序产生的日志,其他的日志过多的时候,有时 ...
- python爬虫从入门到放弃(四)之 Requests库的基本使用(转)
什么是Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库如果你看过上篇文章关于urllib库的使用,你会发现,其 ...
- Ubuntu编译内核树
什么是内核树?刚开始我也没弄明白,通过这几天的学习,有所感悟,就说说我的理解吧!从形式上看,内核树与内核源码的目录结构形式是相同的,都是由各个层次的文件目录结构组成,但是其中的具体内容肯定是不同的.从 ...