题目描述

在一个小国家中,一个新的小镇终于建成了!如往常一样,Mirko获得了“首席税务巡查员”的职位。他的任务是保证正确地计算各公司的收入情况。一共有N家办公室坐落在主干道上,从左到右被编号为1~N。一开始,所有办公室一开始都是空的。随后,一些公司会搬入或搬出某些办公室。Mirko时不时地会经过某些办公室并审查在这些办公室中,最富有的公司的账目。

一个公司被以如下的方式描述:

T-表示搬入的第一天。

K-表示搬入的办公室的标号。

Z-公司每日的盈利。(可以是负值表示亏损)

S-公司搬入时的公司财务情况。(即公司的账户资金,也可以是负值)

如果一家公司已经在 K 办公室了,当有新公司要进入 K 办公室时,这家公司会立刻搬出。

新公司第一天并不会运营,盈利从第二天开始计算。

Mirko的审查以 3 个整数来描述:

T-审查的时间。

A 和 B-Mirko会检查 A 办公室至 B 办公室(包括A和B)之间的公司。

Mirko只会在一天结束时检查,所有公司这时已经计算完成了当天利润。


输入格式

第一行包含 2 个正整数:N(1<=N<=100000)表示办公室的数量和M(1<=M<=300000)表示事件的个数。

接下来 M 行,遵循以下格式:“1 T K Z S”或“2 T A B”(含义如题目描述)。其中 T 会严格递增,并且最后一天小于 1000000,Z 和 S 的绝对值也严格小于 1000000。

(注意A可能大于B)


输出格式

对于每次Mirko的审查,每行输出一个整数,表示当天最富有的公司的资产(可以为负)。如果Mirko经过的所有办公室中都没有公司入驻,则输出“nema”(不加引号)。


  • 题解:

    • 由于$T$单调递增,所以题意是支持插入,求某个点在标号为$[L,R]$的一次函数上的最大值;
    • 答案一定在下凸壳上,分块维护凸壳,有修改操作就打修改标记,查询时遇到修改标记暴力重构区间的凸壳;
    • 同时$T$是单调递增的,可以维护每个块的最优值位置,查询向后移动;
    • 设分块大小为$B$
    • $T = nB \ log B+\frac{n^2}{B} \   \ = n( BlogB + \frac{n}{B})$
    • 取$B = \sqrt{\frac{n}{logn}}$,$T = O(n \sqrt{n} \sqrt{log n})$
    •  #include<cstdio>
      #include<iostream>
      #include<algorithm>
      #include<cstring>
      #include<queue>
      #include<cmath>
      #include<vector>
      #include<stack>
      #include<map>
      #include<set>
      #define Run(i,l,r) for(int i=l;i<=r;i++)
      #define Don(i,l,r) for(int i=l;i>=r;i--)
      #define ll long long
      #define ld double
      #define mk make_pair
      #define fir first
      #define sec second
      #define il inline
      #define rg register
      #define pb push_back
      using namespace std;
      const int N=;
      const ll inf = 1e18;
      int n,m,u,bl[N],st[N],ed[N],vis[N],mfy[N],L[N],R[N],used[N];
      ld px[N];
      il char gc(){
      static char*p1,*p2,s[];
      if(p1==p2)p2=(p1=s)+fread(s,,,stdin);
      return(p1==p2)?EOF:*p1++;
      }
      il int rd(){
      int x=,f=; char c=gc();
      while(c<''||c>''){if(c=='-')f=-;c=gc();}
      while(c>=''&&c<='')x=(x<<)+(x<<)+c-'',c=gc();
      return x*f;
      }
      struct line{
      ll k,b;
      line(ll _k=,ll _b=):k(_k),b(_b){};
      bool operator <(const line&l)const{return k==l.k?b>l.b:k<l.k;}
      }a[N],b[N];
      ld calx(line x,line y){return (ld)(x.b-y.b)/(y.k-x.k);}
      il void build(int x){
      int cnt=st[x],top=st[x];
      for(rg int i=st[x];i<=ed[x];++i)if(vis[i])b[cnt++]=a[i];
      sort(b+st[x],b+cnt);
      for(rg int i=st[x]+;i<cnt;++i)if(b[i].k!=b[i-].k){
      while(top>st[x]&&calx(b[i],b[top])<px[top-])top--;
      px[top]=calx(b[i],b[top]);b[++top]=b[i];
      }
      L[x]=st[x];R[x]=top;
      }
      il ll max(ll x,ll y){return x>y?x:y;}
      il void query(int T,int x,int y){
      if(x>y)swap(x,y);
      ll re=-inf;
      int l=bl[x],r=bl[y];
      if(l==r){for(rg int i=x;i<=y;++i)if(vis[i])re=max(re,a[i].k*T+a[i].b);}
      else{
      for(rg int i=x;i<=ed[bl[x]];++i)if(vis[i])re=max(re,a[i].k*T+a[i].b);
      for(rg int i=st[bl[y]];i<=y;++i)if(vis[i])re=max(re,a[i].k*T+a[i].b);
      for(rg int i=l+;i<r;++i){
      if(mfy[i])build(i),mfy[i]=,used[i]=;
      if(used[i]){
      while(L[i]<R[i]&&px[L[i]]<T)L[i]++;
      re=max(re,b[L[i]].k*T+b[L[i]].b);
      }
      }
      }
      if(re==-inf)puts("nema");else printf("%lld\n",re);
      }
      int main(){
      #ifndef ONLINE_JUDGE
      freopen("bzoj3463.in","r",stdin);
      freopen("bzoj3463.out","w",stdout);
      #endif
      n=rd();m=rd();u=sqrt(n/log2(n))+;
      for(int i=;i<=n;++i)bl[i]=(i-)/u+;
      for(int i=;i<=bl[n];++i)st[i]=ed[i-]+,ed[i]=ed[i-]+u;
      ed[bl[n]]=n;
      for(int i=,op,T,x,y;i<=m;++i){
      op=rd();T=rd();x=rd();y=rd();
      if(op&){
      vis[x]=;mfy[bl[x]]=;
      a[x]=line(y,rd()-(ll)T*y);
      }else query(T,x,y);
      }
      return ;
      }//by tkys_Austin;

      bzoj3463

bzoj3463【COCI2012】 Inspector的更多相关文章

  1. 【COCI2012】覆盖字符串

    [题目描述] 给出一个长度为N的小写字母串,现在Mirko有M个若干长度为Li字符串.现在Mirko要用这M个字符串去覆盖给出的那个字符串的.覆盖时,必须保证:1.Mirko的字符串不能拆开,旋转:2 ...

  2. 企业IT管理员IE11升级指南【16】—— 使用Compat Inspector快速定位IE兼容性问题

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  3. 【题解】Informacije [COCI2012]

    [题解]Informacije [COCI2012] 传送门:官方题面 [题目描述] 有一个长度为 \(n\) 的 序列 \(a\)(由 \([1,n]\) 中的数组成,且每个数只会出现一次),现给出 ...

  4. 企业IT管理员IE11升级指南【17】—— F12 开发者工具

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  5. 企业IT管理员IE11升级指南【15】—— 代理自动配置脚本

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  6. 企业IT管理员IE11升级指南【1】—— Internet Explorer 11增强保护模式 (EPM) 介绍

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  7. 企业IT管理员IE11升级指南【2】—— Internet Explorer 11 对Adobe Flash的支持

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  8. 企业IT管理员IE11升级指南【3】—— IE11 新的GPO设置

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  9. 企业IT管理员IE11升级指南【4】—— IE企业模式介绍

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

随机推荐

  1. 初学node.js-npm使用(2)

    1.安装Node封装模块 安装Node封装模块很重要,因为开发项目中会用到各种各样的功能,这时就需要去下载开源的模块 使用npm install <module_name> module_ ...

  2. 05-matplotlib-直方图

    import numpy as np import matplotlib.pyplot as plt ''' 由于一系列不等的纵形图组成,表示数据分布的情况 例如:某年级同学的身高分布 需要注意与 柱 ...

  3. 【异常检测】Isolation forest 的spark 分布式实现

    1.算法简介 算法的原始论文 http://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf .python的sklearn中已经实现 ...

  4. [译文]c#扩展方法(Extension Method In C#)

    原文链接: https://www.codeproject.com/Tips/709310/Extension-Method-In-Csharp 介绍 扩展方法是C# 3.0引入的新特性.扩展方法使你 ...

  5. 升级Xcode 10 后报错问题记录([CP] Copy Pods Resources)

    1.升级Xcode到Version 10.0 (10A255)后,运行已有项目,报如下错误: error: Multiple commands produce '/Users/galahad/Libr ...

  6. IntelliJ 10.0.1设置系统的JDK

    IntelliJ 10.0.1设置JDK: File-->Project Structure: project SDK--New a jsdk.

  7. 实验三— —敏捷开发与XP实践

    ---恢复内容开始--- java的第二个实验——JAVA面向对象程序设计 北京电子科技学院 实     验    报     告 课程:Java程序设计 班级:1352 姓名:林涵锦 学号:2013 ...

  8. Spring笔记②--各种属性注入

    Ioc 反转控制 反转资源获取的方向 分离接口与实现 采用工厂模式 采用反转控制   Di 依赖注入 依赖容器把资源注入   配置bean 通过全类名(反射) 配置形式:基于xml方式 Ioc容器的b ...

  9. c++第七次作业____最后的总结

    先言: 在这过程中学到: 第二次作业Github的使用 第四次作业计算器的计算 ps:表达式处理以及计算 第五次作业文件的处理问题 第六次作业界面的设计 总结: 1.这学期的计算器,做的有点匆忙,偶尔 ...

  10. 使用java开发微信公众平台(1)

    目录 开发服务器 域名验证 获取access_token 自定义菜单 个人账号不能定义url访问服务器,使用测试号就不用认证添加url了,进入公众平台测试账号 开发服务器 域名验证 进入公众平台测试账 ...