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 解题报告的更多相关文章

  1. 洛谷 P3521 [POI2011]ROT-Tree Rotations 解题报告

    P3521 [POI2011]ROT-Tree Rotations 题意:递归给出给一棵\(n(1≤n≤200000)\)个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少. 大体 ...

  2. 洛谷_Cx的故事_解题报告_第四题70

    1.并查集求最小生成树 Code: #include <stdio.h> #include <stdlib.h>   struct node {     long x,y,c; ...

  3. [洛谷P3527] [POI2011]MET-Meteors

    洛谷题目链接:[POI2011]MET-Meteors 题意翻译 Byteotian Interstellar Union有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1 ...

  4. 洛谷 P2317 [HNOI2005]星际贸易 解题报告

    P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...

  5. 洛谷 P3802 小魔女帕琪 解题报告

    P3802 小魔女帕琪 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组合,从 ...

  6. 洛谷 P2606 [ZJOI2010]排列计数 解题报告

    P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...

  7. 洛谷1303 A*B Problem 解题报告

    洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...

  8. 洛谷P3527 [POI2011]MET-Meteors [整体二分]

    题目传送门 Meteors 格式难调,题面就不妨放了. 分析: 一道整体二分的练手题. 就是一般的整体二分的套路,但是要注意,将修改和询问加入队列的时候要先加修改再加询问.另外,博主代码打得太丑,常数 ...

  9. 洛谷 P3084 [USACO13OPEN]照片Photo 解题报告

    [USACO13OPEN]照片Photo 题目描述 农夫约翰决定给站在一条线上的\(N(1 \le N \le 200,000)\)头奶牛制作一张全家福照片,\(N\)头奶牛编号\(1\)到\(N\) ...

随机推荐

  1. 腾讯WeTest受邀参展2018谷歌开发者大会,Android 9专区免费开放

    2018谷歌开发者大会(Google Developer Days)于9月20日正式在上海拉开帷幕.在今年,围绕谷歌最新研发技术,来自机器学习.物联网.云服务等各领域精英参会并进行了案例分享. 201 ...

  2. eclipse报这个错误org.eclipse.swt.SWTError: No more handles (eclipse 和 TeamViewer 冲突)

    错误:  org.eclipse.swt.SWTError: No more handles     at org.eclipse.swt.SWT.error(SWT.java:4387)     a ...

  3. jQuery实现“回到顶部”按钮功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 怎样安装JMeter

    JMeter有图形界面, 而且支持中文! JMeter官网地址: http://jmeter.apache.org/ 点击左上角的下载: 点击下面的.zip后缀的压缩包: 解压到本地: JMeter目 ...

  5. WCF服务库创建-20140919

    1. 创建wcf服务库 2. 宿主到web程序上 // 宿主wcf服务库 RouteTable.Routes.Add(new ServiceRoute("ctserver.dll" ...

  6. 20170413B端业务访问故障排查思路

    现象: 1.全国用户电视端页面无法显示,刷不出版面. 2.后端服务无法打开,报错,504,502   显示服务器端业务故障超时. 3.其他业务也出现缓慢情况,并不严重. 排查: 1.系统服务排查,常规 ...

  7. "Hello world!"团队第八次会议

    Scrum会议 今天是我们"Hello world!"团队第八次召开会议,博客内容是: 1.会议时间 2.会议成员 3.会议地点 4.会议内容 5.todo list 6.会议照片 ...

  8. Android开发随笔5

    昨天: 对界面的进一步设计补充 可以在界面之间的跳转 研究了对图标等的操作 今天: 实现对库的相关操作 学习视视频内容‘ 复习java的一些知识.

  9. LintCode-38.搜索二维矩阵 II

    搜索二维矩阵 II 写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每一列的整数从上到下是排序的. 在每一行或每一列中没有重复 ...

  10. C++多态实现与继承

    面向对象的三个基本特征 面向对象的三个基本特征是:封装.继承.多态.其中, 封装可以隐藏实现细节,使得代码模块化: 继承可以扩展已存在的代码模块(类),它们的目的都是为了——代码重用: 而多态则是为了 ...