70分算法+30分打表

#include<ctime>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#define lc k<<1
#define rc k<<1|1
#define EF if(ch==EOF) return x;
using namespace std;
const int N=1e5+;
const int inf=2e9;
typedef long long ll;
int n,Q,ans,a[N],mx[N];
ll sum[N<<];bool tag[N<<];
inline int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;EF;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
void build(int k,int l,int r){
if(l==r){
sum[k]=mx[l];
return ;
}
int mid=l+r>>;
build(lc,l,mid);
build(rc,mid+,r);
sum[k]=sum[lc]+sum[rc];
}
void pushdown(int k,int l,int r){
if(!tag[k]||l==r) return ;
int mid=l+r>>;
sum[lc]=sum[k]/(r-l+)*(mid-l+);
sum[rc]=sum[k]/(r-l+)*(r-mid);
tag[lc]=tag[rc]=;tag[k]=;
}
void change(int k,int l,int r,int x,int y,int v){
if(l==x&&r==y){
sum[k]=1LL*(r-l+)*v;
tag[k]=;
return ;
}
pushdown(k,l,r);
int mid=l+r>>;
if(y<=mid) change(lc,l,mid,x,y,v);
else if(x>mid) change(rc,mid+,r,x,y,v);
else change(lc,l,mid,x,mid,v),change(rc,mid+,r,mid+,y,v);
sum[k]=sum[lc]+sum[rc];
}
ll query(int k,int l,int r,int p){
if(l==r) return sum[k];
pushdown(k,l,r);
int mid=l+r>>;
if(p<=mid) return query(lc,l,mid,p);
else return query(rc,mid+,r,p);
// sum[k]=sum[lc]+sum[rc];
}
void ord(){
int Max=-inf;ans=;
for(int j=;j<=n;j++){
Max=max(Max,a[j]);
ans+=Max;
}
printf("%d\n",ans);
for(int i=,x,y;i<=Q;i++){
x=read();y=read();
a[x]+=y;
int Max=-inf;ans=;
for(int j=;j<=n;j++){
Max=max(Max,a[j]);
ans+=Max;
}
printf("%d\n",ans);
}
}
int main(){
n=read();
for(int i=;i<=n;i++) a[i]=read();Q=read();
if(n<=){
ord();
return ;
}
mx[]=-inf;
for(int i=;i<=n;i++) mx[i]=max(mx[i-],a[i]);
build(,,n);printf("%I64d\n",sum[]);
for(int i=,x,y;i<=Q;i++){
x=read();y=read();
a[x]+=y;
int l=x,r=n,pos=;
while(l<=r){
int mid=l+r>>;
if(query(,,n,mid)<a[x]) l=mid+,pos=mid;
else r=mid-;
}
if(pos) change(,,n,x,pos,a[x]);
printf("%I64d\n",sum[]);
}
return ;
}

如果你会线段树log^2求单调栈的话..此题可做

你考虑。。

维护每个区间的答案

以及一个看似暴力的询问函数(x,y)

表示从x节点出发 左边max是y的答案

然后你会发现每次只需要递归到一侧

就log^2了

对啊……好像是维护斜率啥的吧……

不是斜率

讨论最大值的来源

是这样的

对于x

左边最大值是y

如果你发现x左儿子最大值<=y

那么显然没有递归左儿子的必要

否则递归完左儿子后,右儿子的答案与y无关

因为变成了x左儿子的最大值

这个通过线段树之前维护的信息就可以知道

每次都只会递归一侧

不管是查询还是信息合并都用这个logn的函数就好了

线段树维护的是什么呀?
区间最大值
以及区间的答案

可以参考:上帝之手

Codevs 5914 [SXOI2016]最大值的更多相关文章

  1. codevs 3289 花匠

    题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...

  2. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  3. codevs 1052 地鼠游戏

    1052 地鼠游戏 http://codevs.cn/problem/1052/ 题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不 ...

  4. codevs 1245 最小的N个和

    1245 最小的N个和 http://codevs.cn/problem/1245/ 题目描述 Description 有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N ...

  5. [题解]vijos & codevs 能量项链

    a { text-decoration: none; font-family: "comic sans ms" } .math { color: gray; font-family ...

  6. Codevs 1021 (玛丽卡)

    题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们 ...

  7. 求最大边/最小边的比值最小的路径 codevs 1001 舒适的路线

    codevs 1001 舒适的路线 2006年  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description Z小镇是一个景色宜人 ...

  8. codevs 1051 接龙游戏

    codevs 1051 接龙游戏 http://codevs.cn/problem/1051/ 题目描述 Description 给出了N个单词,已经按长度排好了序.如果某单词i是某单词j的前缀,i- ...

  9. CODEVS 1817 灾后重建 Label:Floyd || 最短瓶颈路

    描述 灾后重建(rebuild)  B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两 ...

随机推荐

  1. C#:消息框

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  2. Oracle XE安装具体解释

    一.原数据库的卸载       数据库的卸载就不多说了,讲一下过程:       1.运行Oracle Uninstall,卸载Oracle产品     2.删除regedit下的全部Oracle相关 ...

  3. 搜狐畅游CEO王滔辞职

    凤凰科技讯 11月3日消息,搜狐公布公告确认搜狐畅游CEO离职.公告称王滔因个人原因辞去畅游首席运行官职务.将继续担任畅游公司董事和首席产品官. 据搜狐公告,董事会任命搜狐总裁余楚媛与畅游总裁陈德文为 ...

  4. kong 插件开发分析

    1.安装开发环境:(我这里用IntelliJ IDEA) 先安装lua 5.1和luarocks 因为kong基于openresty,openresty使用luajit luajit支持的是lua5. ...

  5. Mysql 日期时间类型详解

    MySQL 中有多种数据类型可以用于日期和时间的表示,不同的版本可能有所差异,表3-2 中列出了MySQL 5.0 中所支持的日期和时间类型. 这些数据类型的主要区别如下: * 如果要用来表示年月日 ...

  6. java中加密解密工具类

    在工作中经常遇到需要加密.解密的场景.例如用户的手机号等信息,在保存到数据库的过程中,需要对数据进行加密.取出时进行解密. public class DEStool { private String ...

  7. [原]MS SQL表字段自增相关的脚本

    --查询表是否有自增字段 SELECT OBJECTPROPERTY(OBJECT_ID('[表名]'), 'TableHasIdentity') --查询表的自增字段 SELECT COLUMN_N ...

  8. ubuntu中rc.local无效

    在ubuntu中写了一点iptables规则,但是,竟然iptables竟然无效,经过多方查找问题...眼泪... 终于发现是rc.local竟然没有运行,我晕.仔细检查iptables脚本n遍,没有 ...

  9. Redis C#入门

    redis-cli.exe 为客户端 redis-server.exe 为服务端 进行操作都是在客户端上操作,先随便添加一组 key value试一下: 再输入Get "键"名称, ...

  10. java synchronized究竟锁住的是什么

    刚学java的时候,仅仅知道synchronized一个线程锁.能够锁住代码,可是它真的能像我想的那样,能够锁住代码吗? 在讨论之前先看一下项目中常见关于synchronized的使用方法: publ ...