BZOJ4293: [PA2015]Siano
Description
Input
Output
Sample Input
1 2 4 3
1 1
2 2
3 0
4 4
Sample Output
6
18
0
HINT
- #include<cstdio>
- #include<cctype>
- #include<queue>
- #include<cstring>
- #include<algorithm>
- #define rep(i,s,t) for(int i=s;i<=t;i++)
- #define dwn(i,s,t) for(int i=s;i>=t;i--)
- #define ren for(int i=first[x];i;i=next[i])
- using namespace std;
- const int BufferSize=1<<16;
- char buffer[BufferSize],*head,*tail;
- inline char Getchar() {
- if(head==tail) {
- int l=fread(buffer,1,BufferSize,stdin);
- tail=(head=buffer)+l;
- }
- return *head++;
- }
- typedef long long ll;
- inline ll read() {
- ll x=0,f=1;char c=Getchar();
- for(;!isdigit(c);c=Getchar()) if(c=='-') f=-1;
- for(;isdigit(c);c=Getchar()) x=x*10+c-'0';
- return x*f;
- }
- const int maxn=500010;
- int n,m,A[maxn];
- ll setv[maxn<<2],sett[maxn<<2],suma[maxn<<2],sumv[maxn<<2],maxv[maxn<<2],maxt[maxn<<2];
- void maintain(int o,int l,int r) {
- int lc=o<<1,rc=lc|1;
- if(setv[o]>=0) {
- sumv[o]=setv[o]*(r-l+1)-sett[o]*suma[o];
- maxv[o]=setv[o];maxt[o]=sett[o];
- }
- else if(l<r) {
- sumv[o]=sumv[lc]+sumv[rc];
- maxv[o]=maxv[rc];maxt[o]=maxt[rc];
- }
- }
- void pushdown(int o,int l,int r) {
- int lc=o<<1,rc=lc|1,mid=l+r>>1;
- if(setv[o]>=0) {
- setv[lc]=setv[rc]=setv[o];
- sett[lc]=sett[rc]=sett[o];
- maxt[lc]=maxt[rc]=sett[o];
- sumv[lc]=setv[o]*(mid-l+1)-sett[o]*suma[lc];
- sumv[rc]=setv[o]*(r-mid)-sett[o]*suma[rc];
- maxv[lc]=maxv[rc]=setv[o];
- setv[o]=sett[o]=-1;
- }
- }
- void build(int o,int l,int r) {
- if(l==r) suma[o]=A[l];
- else {
- setv[o]=-1;
- int mid=l+r>>1,lc=o<<1,rc=lc|1;
- build(lc,l,mid);build(rc,mid+1,r);
- suma[o]=suma[lc]+suma[rc];
- }
- }
- ll ans,d,b;
- int findst(int o,int l,int r) {
- if(l==r) return l;
- else {
- pushdown(o,l,r);
- int mid=l+r>>1,lc=o<<1,rc=lc|1;
- if(maxv[lc]+(d-maxt[lc])*A[mid]>b) return findst(lc,l,mid);
- return findst(rc,mid+1,r);
- }
- }
- void update(int o,int l,int r,int ql,int qr) {
- if(ql<=l&&r<=qr) {
- ans+=sumv[o]+d*suma[o]-b*(r-l+1);
- setv[o]=b;sett[o]=d;
- }
- else {
- pushdown(o,l,r);
- int mid=l+r>>1,lc=o<<1,rc=lc|1;
- if(ql<=mid) update(lc,l,mid,ql,qr);
- if(qr>mid) update(rc,mid+1,r,ql,qr);
- }
- maintain(o,l,r);
- }
- int main() {
- n=read();m=read();
- rep(i,1,n) A[i]=read();
- sort(A+1,A+n+1);
- build(1,1,n);
- rep(i,1,m) {
- d=read();b=read();
- if(maxv[1]+(d-maxt[1])*A[n]<=b) puts("0");
- else {
- int s=findst(1,1,n);ans=0;
- update(1,1,n,s,n);printf("%lld\n",ans);
- }
- }
- return 0;
- }
BZOJ4293: [PA2015]Siano的更多相关文章
- BZOJ4293 [PA2015]Siano(线段树)
传送门 这Seg确实不好写,不过因为它与ai的相对顺序无关,所以,我们在对ai排序之后,就可做了.维护一个区间最大值,维护一个和,维护一个区间赋值的懒标记,再维护一个时间变化的标记就可以了. 因为不论 ...
- 【BZOJ4293】[PA2015]Siano 线段树
[BZOJ4293][PA2015]Siano Description 农夫Byteasar买了一片n亩的土地,他要在这上面种草. 他在每一亩土地上都种植了一种独一无二的草,其中,第i亩土地的草每天会 ...
- 2018.07.23[PA2015]Siano(线段树)
[PA2015]Siano 描述 Description 农夫Byteasar买了一片n亩的土地,他要在这上面种草. 他在每一亩土地上都种植了一种独一无二的草,其中,第i亩土地的草每天会长高a[i]厘 ...
- BZOJ.4293.[PA2015]Siano(线段树)
题目链接 \(Description\) 有一片n亩的土地,要在这上面种草. 在每一亩土地上都种植了一种独一无二的草,其中,第\(i\)亩土地的草每天会长高\(a[i]\)厘米. 一共会进行\(m\) ...
- 【BZOJ】4293: [PA2015]Siano 线段树上二分
[题意]给定n棵高度初始为0的草,每天每棵草会长高a[i],m次收割,每次在d[i]天将所有>b[i]的草收割到b[i],求每次收割量.n<=500000. [算法]线段树上二分 [题解] ...
- [PA2015]Siano 单调栈
由于某人找了个单调栈的题解但是没研究透所以让我们来研究............ 首先先来考虑下面一种情况,假设第\(k\)次切割时,天数为\(d_k\),高度为\(b_k\),第\(k+1\)次切割时 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 【bzoj4293】【PA2015】Siano
如题,首先可以考虑相对大小是不变的. 那么先sort,之后每次在线段树上二分即可. #include<bits/stdc++.h> typedef long long ll; using ...
- BZOJ 4291: [PA2015]Kieszonkowe 水题
4291: [PA2015]Kieszonkowe Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnli ...
随机推荐
- cd命令
[cd] 切换目录 cd===>change directory 命令功能 : 切换目录到dirname 命令实例: 实例1:切换到跟目录下 命令: cd / 输出: ...
- Mysql 存储引擎中InnoDB与Myisam的主要区别
一直以为我spring事物没有配置好,结果发现是mysql的表本身设置成了Myisam 引擎.改成innodb就支持事物了. 1, 事务处理 innodb 支持事务功能,myisam 不支持. Myi ...
- spring拦截器 实现应用之性能监控
package cn.ximi.erp.web.common.interceptors; import cn.ximi.core.common.utils.string.StringUtil; imp ...
- DevExpress 隐藏Ribbon中barbuttonItem的SuperTip(1)
public frmMain() { InitializeComponent(); ribbonControl1.Manager.HighlightedLinkChanged += Manager_H ...
- Excel中VBA进行插入列、格式化、排序
在数据分析中经常需要对数据进行排序.排名,观察指标排名变化情况,手工处理的话不是太困难,但经常使用,还是编写宏比较方便. 宏命令比较简单,不多解释,只说一下注意事项: 1.有合并单元格,比如列.行合并 ...
- 移居 GitHub
博客很久没能更新了,很多代码也从博客园逐渐转移到 GitHub,欢迎新老用户光顾: https://github.com/kedebug 个人博客:http://kedebug.me/
- Sublime 3 如何配置SVN插件
在sublime里面安装svn的插件,就可以在sublime的操作界面里面进行相关svn操作,这样就不用再回到文件系统中,进行相关svn的操作. 1.在进入sublime界面后,点击顶部菜单“Pref ...
- winform中选择文件获取路径
private void button1_Click(object sender, EventArgs e) { //此时弹出一个可以选择文件的窗体 OpenFileDialog fileDialog ...
- MFC 静态文本的自绘 空心字的实现
想在对话框里,显示几个字是很简单的,只要用静态文本的输出就可以了.然而有时候我们需要显示特效的字,我们希望显示的文字就像Word里的艺术字一样,看起来美观.这时我们可以重写CStatic类.用Draw ...
- 鼠标右击.exe的程序出现闪退(桌面重启)怎么办
桌面鼠标右击,然后点NVIDIA控制面板(或者按windows+S组合键,在底下输入NVIDIA,然后点NVIDIA控制面板) 好了,然后任意找个文件试试...如图,问题完美解决