考虑将序列分成$\sqrt{n\log n}$块,每块维护下凸壳,修改时在相应块打上需要修改的标记。

查询时,对于两端零散部分暴力查询。

对于中间的块,如果有修改标记,则暴力重构。

然后在凸壳上查询时不断把小于$T$的左端点踢出,那么最后如果凸壳上还有点,那么左端点一定$\geq T$。

时间复杂度$O(m\sqrt{n\log n})$。

#include<cstdio>
#include<algorithm>
#define N 100010
using namespace std;
typedef long long ll;
const ll inf=1LL<<60;
int n,m,lim,i,op,T,x,y,z,id[N],st[N],en[N],L[N],R[N],need[N],b[N],q[N];ll ans;
struct P{int k;ll b;P(){}P(int _k,ll _b){k=_k,b=_b;}}a[N];
inline bool cmp(int x,int y){return a[x].k==a[y].k?a[x].b>a[y].b:a[x].k<a[y].k;}
inline void read(int&a){
char c;bool f=0;a=0;
while(!((((c=getchar())>='0')&&(c<='9'))||(c=='-')));
if(c!='-')a=c-'0';else f=1;
while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';
if(f)a=-a;
}
inline double pos(int x,int y){return 1.0*(a[x].b-a[y].b)/(a[y].k-a[x].k);}
inline void build(int x){
int cnt=0,t=st[x],i;
for(i=t;i<=en[x];i++)if(a[i].b>-inf||i==t)q[++cnt]=i;
sort(q+1,q+cnt+1,cmp);
for(b[t]=q[1],i=2;i<=cnt;i++)if(a[q[i]].k!=a[q[i-1]].k){
while(t>st[x]&&pos(q[i],b[t])<pos(b[t],b[t-1]))t--;
b[++t]=q[i];
}
L[x]=st[x],R[x]=t;
}
inline void ask(int x){
while(L[x]<R[x]&&(double)T>pos(b[L[x]],b[L[x]+1]))L[x]++;
if(L[x]<=R[x])ans=max(ans,1LL*a[b[L[x]]].k*T+a[b[L[x]]].b);
}
inline void getans(int x,int y){
if(id[x]==id[y]){
for(;x<=y;x++)ans=max(ans,1LL*a[x].k*T+a[x].b);
return;
}
for(i=en[id[x]];i>=x;i--)ans=max(ans,1LL*a[i].k*T+a[i].b);
for(i=st[id[y]];i<=y;i++)ans=max(ans,1LL*a[i].k*T+a[i].b);
for(i=id[x]+1;i<id[y];i++){
if(need[i])build(i),need[i]=0;
ask(i);
}
}
int main(){
read(n),read(m);
for(i=1;1<<i<n;i++);
while(lim*lim*i<n)lim++;
for(i=1;i<=n;i++)en[id[i]=i/lim]=i;
for(i=n;i;i--)st[id[i]]=i;
for(i=1;i<=n;i++)a[i]=P(0,-inf);
for(i=id[1];i<=id[n];i++)L[i]=1;
while(m--){
read(op),read(T),read(x),read(y);
if(op==1){
read(z);
a[x]=P(y,-1LL*y*T+z);
need[id[x]]=1;
}else{
if(x>y)swap(x,y);
ans=-inf;
getans(x,y);
if(ans>-inf)printf("%lld\n",ans);else puts("nema");
}
}
return 0;
}

  

BZOJ3463 : [COCI2012] Inspector的更多相关文章

  1. 【bzoj3463】[COCI2012] Inspector

    *题目描述: 在一个小国家中,一个新的小镇终于建成了!如往常一样,Mirko获得了“首席税务巡查员”的职位.他的任务是保证正确地计算各公司的收入情况.一共有N家办公室坐落在主干道上,从左到右被编号为1 ...

  2. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  3. bzoj3463【COCI2012】 Inspector

    题目描述 在一个小国家中,一个新的小镇终于建成了!如往常一样,Mirko获得了“首席税务巡查员”的职位.他的任务是保证正确地计算各公司的收入情况.一共有N家办公室坐落在主干道上,从左到右被编号为1~N ...

  4. 自定义Inspector检视面板

    Unity中的Inspector面板可以显示的属性包括以下两类:(1)C#以及Unity提供的基础类型:(2)自定义类型,并使用[System.Serializable]关键字序列化,比如: [Sys ...

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

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

  6. Delphi控件之---通过编码学习TStringGrid(也会涉及到Panel控件,还有对Object Inspector的控件Events的介绍

    我是参考了万一的博客里面的关于TStringGrid学习的教程,但是我也结合自己的实际操作和理解,加入了一些个人的补充,至少对我有用! 学用TStringGrid之——ColCount.RowCoun ...

  7. Delphi控件之---UpDown以及其与TEdit的配合使用(比如限制TEdit只能输入数字,还有Object Inspector之组件属性的介绍)

    最近在开发中使用到了UpDown这个控件,但是因为之前没有使用过,所以很不熟悉,于是就编写了一个简单的demo来学习UpDown以及其结合TEdit的用法. 初步的常用功能的简介 目前(2015.08 ...

  8. 一个美术需求引发的Custom Inspector

    需求 Editor模式下,在运行或者非运行状态下,能够按照指定的变化率来自动改变material中属性数值. 需求分析 如何在Editor模式下获得一个游戏对象及其组件,尤其是在非运行状态下?我们知道 ...

  9. nodejs 使用Google浏览器进行可视化调试——Node Inspector工具

    1.npm安装Node Inspector工具,全局安装 命令行执行npm install -g node-inspector 2.启动Node Inspector工具,命令行执行 node-insp ...

随机推荐

  1. 鸟哥的linux私房菜学习笔记 __ 命令与文件的搜寻

    连续输入两次[tab]按键就能够知道使用者有多少命令可以下达.那你知不知道这些命令的完整档名放在哪里?举例来说,ls 这个常用的命令放在哪里呢? 就透过 which 或 type 来找寻吧! 范例一: ...

  2. [POJ1007]DNA Sorting

    [POJ1007]DNA Sorting 试题描述 One measure of ``unsortedness'' in a sequence is the number of pairs of en ...

  3. 删除右键ATI CATALYST(R) Control Center的方法

    http://share.weiyun.com/c47530d3e44ea15b606d4ba6f1b00a28

  4. k-means

    参考:http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006910.html k-means是无监督的聚类算法,比较简单,但包含的思想不简单, ...

  5. nginx(四)初识nginx日志文件

    nginx 日志相关指令主要有两条,一条是log_format,用来设置日志格式,另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,通俗的理解就是先用log_format来定 ...

  6. BZOJ 1600

    开始刷一些USACO月赛题了.. 这题简单递推就不说了. 然后我们发现暴力递推是$O(n^2)$的.看起来非常慢. 这道题拥有浓厚的数学色彩,因此我们可以从数学它的规律上找突破口. (于是暴力大法好, ...

  7. poj 2709

    http://poj.org/problem?id=2709 题意:就是那个老师需要n瓶颜色的墨水,和1瓶颜色的灰色的墨水,但是灰色的墨水没得卖,只能由三种颜色相同的墨水混合而成,但是3瓶50ML的墨 ...

  8. Gym 100801A Alex Origami Squares (求正方形边长)

    题目:传送门.(需要下载PDF) 题意:给定一个长方形,在长方形内部画三个相同的正方形,问正方形的边长最大是多大. 题解:根据长宽比例可以算出三种情况,如果长比宽大三倍以上,那么正方形边长就是宽:如果 ...

  9. HDU1297 Children’s Queue (高精度+递推)

    Children’s Queue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  10. Shopping(hdu 3768)

    题意:给你一个无向图,求从0号点开始遍历所有的指定点再回到0号点的最短路径 #include<cstdio> #include<iostream> #include<qu ...