bzoj5050: 建造摩天楼
Description
Input
Output
可以发现对随机数据$h_i-h_{i-1}<0$的变化次数是O(n)的,因此可以用线段树维护操作,注意特判区间端点。维护区间内h的和,再记一些信息表示再操作几次$h_i-h_{i-1}<0$会出现变化,当出现变化时暴力修改。时间复杂度O(nlogn)。
#include<bits/stdc++.h>
typedef long long i64;
const int N=1e5+,inf=1e8;
char ib[N*],*ip=ib;
int _(){
int x=;
while(*ip<)++ip;
while(*ip>)x=x*+*ip++-;
return x;
}
int n,m,h[N],d[N],_l,_r;
i64 _s;
inline int min(int a,int b){return a<b?a:b;}
inline int max(int a,int b){return a>b?a:b;}
struct node;
node*at(int x);
struct node{
node*lc,*rc;
int L,R,M,a,sz,v1,v2,v3,cd,dd;
i64 s;
void add(int x){
a+=x;
s+=sz*i64(x);
v1+=x,v2-=x;
if(!M)v3+=dd*x;
}
void dn(){
if(a)lc->add(a),rc->add(a),a=;
}
void set(int x,int y){
sz=d[L];
v1=(x<&&y==)?x:-inf;
v2=(x>=&&y==-)?x:inf;
v3=x;
dd=y;
}
void init(){
s=h[L];
set(h[L]-h[L-],d[L]-d[L-]);
}
void up(){
s=lc->s+rc->s;
sz=lc->sz+rc->sz;
v1=max(lc->v1,rc->v1);
v2=min(lc->v2,rc->v2);
cd=lc->cd||rc->cd;
}
void addl(){
if(M)dn(),(_l<=M?lc:rc)->addl(),up();
else{
cd=(!++v3);
++s,++v1,++v2;
}
}
void addr(){
if(M)dn(),(_r<=M?lc:rc)->addr(),up();
else{
cd=(!v3--);
--v1,--v2;
}
}
void add(){
if(_l<=L&&R<=_r)return add();
dn();
if(_l<=M)lc->add();
if(_r>M)rc->add();
up();
}
void sum(){
if(_l<=L&&R<=_r)return void(_s+=s);
dn();
if(_l<=M)lc->sum();
if(_r>M)rc->sum();
}
bool ir(){
return v1>=||v2<||cd;
}
void chk2(){
if(M)dn(),(_l<=M?lc:rc)->chk2(),up();
else{
if(ir()){
_l=L+;
d[L]^=;
cd=;
}else _l=n+;
set(v3,d[L]-d[L-]);
}
}
void chk(){
if(M)dn(),(lc->ir()?lc:rc)->chk(),up();
else{
_l=L+;
d[L]^=;
cd=;
set(v3,d[L]-d[L-]);
}
}
}ns[N*],*np=ns,*rt;
node*at(int x){
node*w=rt;
while(w->M){
w->dn();
w=x<=w->M?w->lc:w->rc;
}
return w;
}
node*build(int L,int R){
node*w=np++;
w->L=L,w->R=R;
if(L<R){
int M=w->M=(L+R)>>;
w->lc=build(L,M);
w->rc=build(M+,R);
w->up();
}else w->init();
return w;
}
int main(){
fread(ib,,sizeof(ib),stdin);
n=_(),m=_();
h[]=inf;
for(int i=;i<=n;++i)h[i]=_(),d[i]=h[i]<h[i-];
rt=build(,n);
for(int o;m;--m){
o=_(),_l=_(),_r=_();
if(o==){
if(d[_l])rt->addl();
if(_r<n&&d[_r])++_r,rt->addr(),--_r;
if(++_l<=_r)rt->add();
while(rt->ir())for(rt->chk();_l<=n;rt->chk2()); }else{
_s=;
rt->sum();
printf("%lld\n",_s);
}
}
return ;
}
bzoj5050: 建造摩天楼的更多相关文章
- 【bzoj5050】【bzoj九月月赛H】建造摩天楼
讲个笑话,这个题很休闲的. 大概是这样的,昨天看到这个题,第一眼星际把题目看反了然后感觉这是个傻逼题. 后来发现不对,这个修改一次的影响是很多的,可能导致一个数突然可以被改,也可能导致一个数不能被改. ...
- 学会了 C 语言真的可以开发出很多东西吗?
马里奥碰到花朵就变身. 什么是马里奥?一个装着 16 × 32 个小色块的长方形,其中一些色块填着颜色,另一些没有.什么是花?一个 16 × 16 的正方形.什么是「变身」?把马里奥这个方块里面代表衣 ...
- H5坦克大战之【建造敌人的坦克】
公司这几天在准备新版本的上线,今天才忙里偷闲来写这篇博客.接着上一篇的"H5坦克大战之[玩家控制坦克移动2]"(http://www.cnblogs.com/zhouhuan/ ...
- (转)使用 SCons 轻松建造程序
在软件项目开发过程中,make 工具通常被用来建造程序.make 工具通过一个被称为 Makefile 的配置文件可以自动的检测文件之间的依赖关系,这对于建造复杂的项目非常有帮助,然而,编写 Make ...
- 使用PowerDesigner设计建造MySQL数据库
使用PowerDesigner设计建造MySQL数据库 一.使用PowerDesigner制作建库脚本 1.设计CDM(Conceptual Data Model) 2.选择 Tools -> ...
- 游戏测评-桥梁建造系Poly Bridge破力桥?游戏测评
最近在b站看到了谜之声的视频:大家来造桥吧! 实在是太搞笑了,看到是一款新出不久还未正式发行的游戏,兴致一来便入手玩了玩.顺手也就写下了这篇测评. POLY BRIDGE 对这个游戏名怎么起个有趣的中 ...
- 浅谈设计模式--建造器模式(Builder Pattern)
建造器模式,是于创建带有大量参数的对象,并避免因参数数量多而产生的一些问题(如状态不一致-JavaBean的setter模式). 如果参数多且有些是必须初始化的,有些是不一定需要初始化的时候,创建对象 ...
- 【BZOJ-2937】建造酿酒厂 前缀和 + 展环为链 + 乱搞
2937: [Poi2000]建造酿酒厂 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 70 Solved: 24[Submit][Status][D ...
- JAVA设计模式之建造模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal representation ...
随机推荐
- xdoj-1022-A simple math problem 2 // 太强了
//其实题目中f[n]的值可理解为存在多少个整数对使a*b<=n #include<cstdio> #define N 1007 #define maxn 1000005 using ...
- HTTP/2及HTTP/3特性
HTTP/2及HTTP/3特性 摘要: 学习 HTTP/2 与 HTTP/3. 前言 HTTP/2 相比于 HTTP/1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性 ...
- java-类与类,类与接口,接口与接口的关系
1.类与类: - 继承关系,只能单继承,可以多层继承. 2.类与接口: - 实现关系,可以单实现,也可以多实现. - 并且还可以在继承一个类的同时实现多个接口. - * 例:class Demo ex ...
- 04 jsp,EL,JSTL
jsp:Java Server Page 什么是jsp?从用户角度看待 ,就是是一个网页 , 从程序员角度看待 , 其实是一个java类, 它继承了servlet,所以可以直接说jsp 就是一个Se ...
- 【BZOJ2154】Crash的数字表格
算是学会反演了……(其实挺好学的一天就能学会…… 原题: 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能 ...
- ThinkPHP 5.2 出 RC1 版本 RC 是什么意思呢?
ThinkPHP 5.2 出 RC1 版本 RC 是什么意思呢? RC 的意思是软件候选版本,就是不会有很大的改变,主要还是在除错方面. 来自收集的资料1引用: Alpha:是内部测试版,一般不向外部 ...
- 在HTML中导入外部的css
1,标签:<link type="text/css" rel="stylesheet" href="CSS样式文件的绝对地址"> ...
- spring mvc 请求参数日期格式化 代码
package com.sbl.pay.subaccount.converter; import java.text.DateFormat; import java.text.SimpleDateFo ...
- ElasticSearch:Lucene和ElasticSearch
Lucene的概念: 关于索引 索引(index)和搜索(搜索),在lucene以及es里面索引是一个动作,即插入动作,包括创建索引以及为索引添加文档:所有则是针对索引(添加)的文档按照评分规则进行查 ...
- CF 666E Forensic Examination——广义后缀自动机+线段树合并
题目:http://codeforces.com/contest/666/problem/E 对模式串建广义后缀自动机,询问的时候把询问子串对应到广义后缀自动机的节点上,就处理了“区间”询问. 还要处 ...