BZOJ4293 Siano

题头:

描述
农夫Byteasar买了一片n亩的土地,他要在这上面种草。 他在每一亩土地上都种植了一种独一无二的草,其中,第i亩土地的草每天会长高a[i]厘米。 Byteasar一共会进行m次收割,其中第i次收割在第d[i]天,并把所有高度大于等于b[i]的部分全部割去。Byteasar想知道,每次收割得到的草的高度总和是多少,你能帮帮他吗?
Input
第一行包含两个正整数n,m(1<=n,m<=500000),分别表示亩数和收割次数。 第二行包含n个正整数,其中第i个数为ai,依次表示每亩种植的草的生长能力。 接下来m行,每行包含两个正整数d[i],bi,依次描述每次收割。 数据保证d[1] < d[2] <… < d[m],并且任何时刻没有任何一亩草的高度超过10^12。
Output
输出m行,每行一个整数,依次回答每次收割能得到的草的高度总和。
样例输入
4 4
1 2 4 3
1 1
2 2
3 0
4 4
样例输出
6
6
18
0

仔细读题
我们需要两个标记
一个mark进行区间加的操作(mark维护天数,实际增加的值是mark[ i ]*a[ i ])
还需要一个marks进行区间更改为的操作
然后对于每次输入
mark增加的值为这一次输入的时间减上一次输入的时间
然后我们维护两个值:区间和和区间最大值(两次区间和相减即使所求答案,区间最大值是方便进行区间更改为的操作,因为这样我们只需要下传标记到区间最大值大于b[ i ]的区间)
维护区间和需要把区间a的值的和乘上mark,区间最大值加上天数乘区间a的最大值;
我们只需要先从小到大排个序,保证单调性,这样找到最后一个高度小于b[ i ]的位置,我们就可以直接把从这儿往后都打上标记

代码如下

//siano
#include<bits/stdc++.h>
using namespace std;
#define ll long long
inline ll read(){char ch;while((ch=getchar())<'0'||ch>'9'){;}ll res=ch-'0';while((ch=getchar())>='0'&&ch<='9')res=res*10+ch-'0';return res;
} 
long long a[500005],tre[2000007],mark[2000007],maxn[2000007],sum[500005],marks[2000007],d1;
//tre:记录区间和,sum
int n,m,l[2000007],r[2000007];
inline ll max(ll a,ll b)
{return a>b?a:b;
}
inline void buildtree(int p,int st,int end){l[p]=st,r[p]=end,mark[p]=0,marks[p]=-1;
//marks初始化为-1,不能初始化为0(有可能是更改为0)if(st==end){tre[p]=maxn[p]=0;return;}int mid=(st+end)>>1;buildtree(p<<1,st,mid),buildtree((p<<1)+1,mid+1,end);
}
inline void pushup(int root)
//向上传递
{maxn[root]=max(maxn[(root<<1)],maxn[(root<<1)+1]);tre[root]=tre[(root<<1)]+tre[(root<<1)+1];
}
inline void pushnow(int root,ll v){
//用mark更改区间mark[root]+=v;tre[root]+=v*(sum[r[root]]-sum[l[root]-1]);maxn[root]+=v*a[r[root]];
}
inline void pushnown(int root,ll k)
//用marks更改区间
{marks[root]=k;maxn[root]=k;tre[root]=k*(r[root]-l[root]+1);mark[root]=0;
//因为更改区间以后前面的操作打下的mark,对当前答案不会有影响,所以把mark变为0;
}
inline void pushDown(int root)
//向下传递
{if(marks[root]!=-1){pushnown((root<<1),marks[root]);pushnown((root<<1)+1,marks[root]);marks[root]=-1;}if(mark[root]){pushnow((root<<1),mark[root]);pushnow((root<<1)+1,mark[root]);mark[root]=0;}
}
inline void modify(int root,int ql,int qr,ll v){
//更改区间值if(ql>r[root]||qr<l[root])return;if(ql<=l[root]&&r[root]<=qr){pushnown(root,v);return;}pushDown(root);int mid=(l[root]+r[root])>>1;if(qr<=mid)modify((root<<1),ql,qr,v);else if(ql>mid)modify((root<<1)+1,ql,qr,v);else modify((root<<1),ql,mid,v),modify((root<<1)+1,mid+1,qr,v);pushup(root);
}
inline ll query(int root,ll v){
//查找第一个小于等于b[ i ]的位置    if(l[root]==r[root])return l[root];pushDown(root);if(maxn[(root<<1)]<=v)return query((root<<1)+1,v);return query((root<<1),v);
}int  main(){n=read(),m=read();for(int  i=1;i<=n;i++){a[i]=read();}sort(a+1,a+1+n);buildtree(1,1,n);for(int i=1;i<=n;i++)sum[i]=sum[i-1]+a[i];d1=0;for(int i=1;i<=m;i++){ll d2=read(),b=read();maxn[1]+=(d2-d1)*a[n],tre[1]+=(d2-d1)*sum[n],mark[1]+=(d2-d1);if(maxn[1]<=b){puts("0"),d1=d2;continue;}ll res=tre[1];int  pos=query(1,b);modify(1,pos,n,b);cout<<res-tre[1]<<'\n',d1=d2;}return 0;
}

转载于:https://www.cnblogs.com/stargazer-cyk/p/10366527.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

同名字的数值求和插入行_EXCEL条件求和的6种技术,你会的超过3种吗?

今天我们来谈谈EXCEL中的条件求和。我们将利用不同的技术实现&#xff0c;而不是使用函数的6种方法直接开始吧&#xff01;数据源结果1、数据透视表-难度系统★☆☆☆☆插入-透视表&#xff0c;行字段-销售员&#xff0c;值-金额2、 函数公式法-难度系数&#xff1a;★★☆☆☆…

pb mysql 中文乱码_解决springmvc+mybatis+mysql中文乱码问题

近日使用ajax请求springmvc后台查询mysql数据库&#xff0c;页面显示中文出现乱码最初在mybatis配置如下select text from News where id#{o}其中表News的text字段为blob类型如此查出的text值在控制台中一直显示乱码。之后google查找相关resultTypeblob相关内容无果&#xff0c…

Centos7构建NFS服务器和连接

准备两台centos7虚拟机 192.168.30.133 192.168.30.129 2.192.168.30.1&#xff08;服务端&#xff09;&#xff0c; 3查看rpc服务是否启动 4测试安装是否成功 5修改配置文件vi/etc/exports /data 192.168.1.0/24(rw,async) 6启动服务 systemctl start nfs rpcinfo -p查看 …

Font Awesome 中文网

Font Awesome 中文网 转载于:https://www.cnblogs.com/beimingbingpo/p/9430703.html

maven pc配置要求_《使命召唤:黑色行动5》公开测试PC配置要求:推荐GTX970+i7

动视官方公开了《使命召唤&#xff1a;黑色行动5》的公开测试PC系统要求&#xff0c;从官方给出的信息来看&#xff0c;PC平台最低需求为GTX 670显卡i5 2500k处理器。 以下为官方公布的系统要求&#xff1a;PC公开测试最低配置需求操作系统&#xff1a;Windows 7 64-Bit (SP1) …

python wireshark_用python编写脚本从wireshark导出的数据文件中提取数据

上篇文章搭建了一个UDP多播程序的基础&#xff0c;所谓基础&#xff0c;就是看着它&#xff0c;我可以写简单的多播程序了&#xff0c;可以在这个基础上面开始工作了。会多播了&#xff0c;多播的内容从哪里来&#xff0c;播出什么内容呢&#xff1f;呵呵&#xff0c;有个设备&…

linux下源码安装nginx

LNMP模式 后续继续更新&#xff0c;先搭建nginx 安装环境gcc gcc-c 2 下载源码包解压 配置第一个报错 安装openssl openssl-devel yum -y install openssl openssl-devel Make报错 解决 tar -zxvf pcre-8.37.tar.gz cd pcre-8.34 ./configure make make install tar -zxvf …

百度地图两个坐标之间的距离计算

/** * 计算两组经纬度坐标 之间的距离 * params &#xff1a;lat1 纬度1&#xff1b; lng1 经度1&#xff1b; lat2 纬度2&#xff1b; lng2 经度2&#xff1b; len_type &#xff08;1:m or 2:km); * return m or km */ /** * 根据经纬度查询距离 * param lng1 经度 * param l…

jdk安装失败_windows配置安装单个Tomcat

1.前期准备1&#xff09;.将tomcat安装文件复制到服务器2&#xff09; 安装jdk&#xff0c;将jdk对应的版本安装到服务器&#xff0c;安装好后cmd命令java -version可以看到对应的版本2.配置环境变量1&#xff09;jdk安装好后配置jdk环境变量变量名&#xff1a;JAVA_HOME 变量值…

centos源码安装PHP

上篇博客说了nginx了&#xff0c;这篇说PHP&#xff0c;下一篇开始开始 bind相关知识 2开始解压 3 ./configure -help|grep mysql 帮助我们查找可以关于mysql的节点 4配置./configure --enable-fpm --with-mysql --with-mysqli --with-pdo-mysql 安装 5报错 6解决 7继续配…

word2vec训练词向量 python_使用Gensim word2vector训练词向量

注意事项Skip-Gram models&#xff1a;输入为单个词&#xff0c;输出目标为多个上下文单词&#xff1b;CBOW models&#xff1a;输入为多个上下文单词&#xff0c;输出目标为一个单词&#xff1b;选择的训练word2vec的语料要和要使用词向量的任务相似&#xff0c;并且越大越好&…

python可以开发exe软件吗_python能开发exe软件吗

pyinstaller将Python脚本打包成exe软件&#xff0c;使在没有Python环境的机器上运行最新版是pyinstaller 3.1.1。支持python2.7和python3.3。 可运行在Windows&#xff0c;Mac和Linux操作系统下。(推荐学习&#xff1a;Python视频教程)但它不是跨编译的&#xff0c;也就是说在W…

mysql参数化查询为什么可以实现_为什么参数化SQL查询可以防止SQL注入?

SQL 语句文本对于数据库来说&#xff0c;是一种指令&#xff0c;与 Shell 中输入的一条条命令行很类似。我们在 SQL 中混入的各种值就是操作的参数。考虑一个 WHERE user_id 10 的筛选&#xff0c;WHERE 的条件包含两个部分&#xff1a;按用户筛选&#xff0c;以及用户 id 的值…

HDU5923-Prediction-有继承味道的并查集

目录 目录思路&#xff1a;&#xff08;有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 目录 题意&#xff1a;传送门 原题目描述在最下面。  有一个n个节点m条边的无向图和一个m个节点的有根树(根为1)。树上每个节点和图中的某些边一一对应。  每次询问给一个树的点的…

bind安装和主要配置

1 yum -y install bind bind-chroot 2rpm -qa|grep bind&#xff0c;查看安装状态 3service named start服务启动 4主配置文件name.conf Option{} 整个bind的全局选项 Logging{}日志输出选项 Zong 根域 这节比较简单&#xff0c;随便看看即可&#xff0c;持续更新bind相关知识…

为什么火狐浏览器中点击按钮失效_各种浏览器审查、监听http头工具介绍

一、谷歌内置的审查工具(v17.0)。右键点击审查(CtrlShirtAlt)浏览器下方会出现审查框&#xff0c;刷新网页就会出现下图所示&#xff0c;先后点击“netword”-->在下方选中资源(如下图的1.php)-->点击headers二、httpwatch。ShirtF2打开httpwatch点击Record按钮&#xff…

RabbitMQ/pika模块

简介 MessageQueue用于解决跨进程、跨线程、跨应用、跨网络的通信问题。 RabbitMQ使用erlang开发&#xff0c;在windows上使用时要先安装erlang。 官方的示例比较容易理解&#xff0c;可以点这里去看看。 结构 生产者 ---> exchange ---> queue ---> 消费者。 生产者负…

java 对象流_java 对象流的简单使用

对象的输入输出流的作用&#xff1a; 用于写入对象 的信息和读取对象的信息。 使得对象持久化。ObjectInputStream : 对象输入流ObjectOutPutStream &#xff1a;对象输出流简单的实例1 importjava.io.File;2 importjava.io.FileInputStream;3 importjava.io.FileOutputStre…

centos搭建ftp服务器

1安装vsftpd 2备份配置文件 3修改配置文件 vi /etc/vsftpd/vsftpd.conf anonymous_enableNO #允许匿名用户访问为了安全选择关闭 local_enableYES # 允许本地用户登录 write_enableYES # 是否允许写入 local_umask022 # 本地用户上传文件的umask dirmessage_enableYES #为YES…

ihtml2document能不能根据id获取dom_一段监视 DOM 的神奇代码

作者&#xff1a;Eddie Aich翻译&#xff1a;疯狂的技术宅原文&#xff1a;https://dev.to/eddieaich/spy-on-the-dom-3d47未经允许严禁转载通过使用此模块&#xff0c;只需将鼠标悬停在浏览器中&#xff0c;即可快速查看DOM元素的属性。基本上它是一个即时检查器。将鼠标悬停在…