Description

农夫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行,每行一个整数,依次回答每次收割能得到的草的高度总和。
Sample Input

4 4

1 2 4 3

1 1

2 2

3 0

4 4
Sample Output

6

6

18

0
HINT

第1天,草的高度分别为1,2,4,3,收割后变为1,1,1,1。

第2天,草的高度分别为2,3,5,4,收割后变为2,2,2,2。

第3天,草的高度分别为3,4,6,5,收割后变为0,0,0,0。

第4天,草的高度分别为1,2,4,3,收割后变为1,2,4,3。

Source

By Claris

注意到所有位置草长度的大小关系总可以看成是不变的,而收割是无视区间下标问题的
那么我们可以先排序然后再构线段树.
每次二分出最小的那个长度大于等于b的位置就行了.

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAXN 500010
#define GET (ch>='0'&&ch<='9')
#define lchild rt<<1,l,mid
#define rchild rt<<1|1,mid+1,r
#define ln rt<<1
#define rn rt<<1|1
#define LL long long
using namespace std;
int n,m,pos;
LL sum[MAXN],a[MAXN],d,b,last;
struct seg
{int l,r;LL maxn,sum,flag,t;seg()   {   flag=-1;    }
}tree[MAXN<<2];
inline void in(LL &x)
{char ch=getchar();x=0;while (!GET)    ch=getchar();while (GET) x=x*10+ch-'0',ch=getchar();
}
inline void update(int rt,LL t)
{tree[rt].maxn+=t*a[tree[rt].r];tree[rt].sum+=(sum[tree[rt].r]-sum[tree[rt].l-1])*t;tree[rt].t+=t;
}
inline void push_down(int rt)
{if (tree[rt].flag!=-1){tree[ln].flag=tree[rn].flag=tree[rt].flag;tree[ln].t=tree[rn].t=0;tree[ln].maxn=tree[rn].maxn=tree[rt].flag;tree[ln].sum=(tree[ln].r-tree[ln].l+1)*tree[rt].flag;tree[rn].sum=(tree[rn].r-tree[rn].l+1)*tree[rt].flag;tree[rt].flag=-1;}if (tree[rt].t) update(ln,tree[rt].t),update(rn,tree[rt].t),tree[rt].t=0;
}
inline void push_up(int rt)
{tree[rt].sum=tree[ln].sum+tree[rn].sum;tree[rt].maxn=tree[rn].maxn;
}
int find(int rt)
{int L=tree[rt].l,R=tree[rt].r;if (L==R)   return L;push_down(rt);if (tree[ln].maxn>=b)   return find(ln);    else    return find(rn);
}
LL query(int rt)
{int L=tree[rt].l,R=tree[rt].r;LL ret=0;if (R<pos)  return 0;if (L>=pos) {ret=tree[rt].sum;tree[rt].sum=(R-L+1)*b;tree[rt].t=0;tree[rt].maxn=b;tree[rt].flag=b;return ret;}push_down(rt);ret=query(ln)+query(rn);push_up(rt);return ret;
}
void build(int rt=1,int l=1,int r=n)
{tree[rt].l=l;tree[rt].r=r;if (l==r)   return;int mid=(l+r)>>1;build(lchild);build(rchild);
}
int main()
{scanf("%d%d",&n,&m);build();for (int i=1;i<=n;i++)  in(a[i]);sort(a+1,a+n+1);for (int i=1;i<=n;i++)  sum[i]=sum[i-1]+a[i];for (;m;m--){in(d);in(b);update(1,d-last);last=d;if (tree[1].maxn<b) {   puts("0");continue; }pos=find(1);printf("%lld\n",query(1)-b*(n-pos+1));}
}

【PA2015】【BZOJ4293】Siano相关推荐

  1. 【快速上手mac必备】常用优质mac软件推荐(音视频、办公、软件开发、辅助工具、系统管理、云存储)

    本文章的主要内容是我作为一名大四学生.准程序员.up主这三种身份来给大家推荐一下 mac 上好用的软件以及工具.本人也是从去年9月份开始从windows阵营转移到了mac阵营,刚开始使用的时候,也曾主 ...

  2. 【bzoj 1833】【codevs 1359】 [ZJOI2010]count 数字计数(数位dp)

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 2774  Solved: 1230 [Submit ...

  3. 【C++自我精讲】基础系列二 const

    [C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...

  4. (四)Asp.net web api中的坑-【api的返回值】

    (四)Asp.net web api中的坑-[api的返回值] 原文:(四)Asp.net web api中的坑-[api的返回值] void无返回值 IHttpActionResult HttpRe ...

  5. 【C++】【九】栈的应用

    [C++][九]栈的应用 就近匹配原理及其步骤: 中缀转后缀:

  6. 【跃迁之路】【495天】程序员高效学习方法论探索系列(实验阶段252-2018.06.15)...

    @(跃迁之路)专栏 实验说明 从2017.10.6起,开启这个系列,目标只有一个:探索新的学习方法,实现跃迁式成长 实验期2年(2017.10.06 - 2019.10.06) 我将以自己为实验对象. ...

  7. (10)Spring Boot修改端口号【从零开始学Spring Boot】

    Spring boot 默认端口是8080,如果想要进行更改的话,只需要修改applicatoin.properties文件,在配置文件中加入: server.port=9090 常用配置: #### ...

  8. 【跃迁之路】【725天】程序员高效学习方法论探索系列(实验阶段482-2019.2.15)...

    实验说明 从2017.10.6起,开启这个系列,目标只有一个:探索新的学习方法,实现跃迁式成长 实验期2年(2017.10.06 - 2019.10.06) 我将以自己为实验对象. 我将开源我的学习方 ...

  9. 【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅

    这是我悲惨的接近爆零的一次考试,但是本蒟蒻不能放弃,还是要总结的QAQ 答题卡 [题目背景] 八月是个悲惨的月份.先不谈炎热的天气,对于新生来说,八月意味着军训: 而对于高二高三的同学来说,八月意味着 ...

  10. 【跃迁之路】【554天】程序员高效学习方法论探索系列(实验阶段311-2018.08.13)...

    @(跃迁之路)专栏 [跃迁之路]奖励金计划正式开始 从2018.7.1起,[跃迁之路]奖励金计划正式起航,从今以后,, 每月1日,我会将自己个人上月收入的1%计入[跃迁之路]奖励金池,积累到足够金额后 ...

最新文章

  1. 设计海量key-value数据的存储查询模块
  2. 内固定取出术后护理_股骨内固定钢板取出术后护理查房记录范文
  3. java接口自动化demo_第一个java 接口自动化程序
  4. 2021-2025年中国杜仲胶行业市场供需与战略研究报告
  5. Python中logging日志使用
  6. Python 开发 利用SQLmap API接口进行批量的SQL注入检测.(SRC挖掘)
  7. html5 连连看小游戏
  8. n个人有c个魔法帽几天去掉所有的帽子
  9. Linux各运行级别含义,描述Linux运行级别0-6的各自含义
  10. 软件开发过程中常见漏洞的解析
  11. qq看点怎么引流?如何通过QQ看点引流营销?
  12. 面试常见几种排序算法 Java代码总结
  13. 技术贴,关于Rhino各类版本无法打开问题
  14. 得到谷歌认证的《Android UI框架进阶解密》开源了,亮瞎我的钛合金
  15. 定时提醒软件有哪些 定时提醒便签推荐
  16. android同步目录,如何使用FolderSync在安卓手机上同步文件夹到坚果云?
  17. nod32永久升级补丁
  18. 23位子网掩码是多少_23位子网掩码ip范围
  19. Making a Difference to Differential Evolution
  20. GO语言03(Restful API,API流程以及代码结构)

热门文章

  1. Benewake(北醒) 短距 TF-Luna 8m介绍以及资料整理
  2. 解决中文乱码的文章,抄的
  3. 算法其实很简单—弗洛伊德(Floyd)算法
  4. 使用封装的exceljs导出excel文件
  5. 关于Typora +pandoc导出文件功能的介绍(具体案例:导出word文件)
  6. [C#] 折腾海康威视的人体测温 模组
  7. EmpireCMS-此栏目暂无任何新增信息
  8. MySQL模拟题及参考答案
  9. grafana 可视化
  10. Microsoft Office 2016安装