洛谷 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\) ...
随机推荐
- 微信小程序之注释出现的问题(.json不能注释)
js的注释一般是双斜杠// 或者是/**/这样的快注释 .json是配置文件,其内容必须符合json格式内部不允许有注释. JSON有两种数据结构: 名称/值对的集合:key : value样式: 值 ...
- Vue 编程之路(二)——跳转页面传值
最近公司的一个项目中使用 Vue 2.0 + element UI 实现一个后台管理系统的前端部分,属于商城类型.其中我负责的部分有一项需要跳转页面,由于跳转前的页面是多个组件构成的,所以在跳转页面的 ...
- 爬虫1.5-ajax数据爬取
目录 爬虫-ajax数据爬取 1. ajax数据 2. selenium+chromedriver知识准备 3. selenium+chromedriver实战拉勾网爬虫代码 爬虫-ajax数据爬取 ...
- 1 wait notify
wait/notify: wait()使线程停止,notify使wait状态的线程继续执行. wait()是Object类的方法,该方法用来将线程置入“预执行队列”,并在wait()方法处停止执行,直 ...
- LeetCode - 13. Roman to Integer - 思考if-else与switch的比较 - ( C++ ) - 解题报告
1.题目: 原题:Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range ...
- Python3 Tkinter-Frame
1.创建 from tkinter import * root=Tk() for fm in ['red','blue','yellow','green','white','black']: Fram ...
- 六:YARN Node Labels
参考:http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-label-based-scheduling/ 为不同的DATANODE打标签,通过标签 ...
- 《梦断代码Dreaming In Code》阅读笔记(二)
这段时间一口气读了5章,所以想着现在一块写阅读笔记. 在阅读的这段时间,我一直是晚上进行阅读,很多时候都是读完一看已经一个小时了,效果还不错.闲话不表,说说阅读心得. 关于底层语言或是低级语言,我之前 ...
- Android 上实现非root的 Traceroute -- 非Root权限下移植可执行二进制文件 脚本文件
作者 : 万境绝尘 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/36438365 示例代码下载 : -- CSDN : htt ...
- C语言 命令行参数 函数指针 gdb调试
. 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21551397 | http://www.hanshul ...