LGP6011题解
昨天考试考到了这道题,那就来补一下题解吧。
题意简单不再阐述。
首先删除之后还要向左移动,很容易想到 ODT 平衡树,这个过于一眼,不再阐述。
重点说第二种方法。
向左平移的这个操作,我们是否可以用别的方法代替呢?
比如不向左平移,后面的操作时“修正”下标。
对于“修正”操作,可以二分。直接在线段树上二分/在树状数组上倍增(也就是在树状数组上二分)。
二分有一个要注意的细节是:如果二分的是最右边的满足条件的端点,记得不要 Find(x) 而是 Find(x-1)+1。
查询和修改操作就是线段树板子。
代码:
#include<cstdlib>
#include<cstdio>
#include<cctype>
const int M=1e6+5,INF=0x7fffffff;
int n,m,G,tmp,t[M],a[M];
struct Node{
int mx,mi;
Node(const int&mx=-INF,const int&mi=INF):mx(mx),mi(mi){}
}zkw[M<<2],it;
inline int min(const int&a,const int&b){
return a>b?b:a;
}
inline int max(const int&a,const int&b){
return a>b?a:b;
}
inline void Add(register int id){
for(;id<=n;id+=id&-id)++t[id];
}
inline int Find(const int&id){
int len,ans=0,num=0;
for(len=tmp;len;len>>=1){
if(ans+len<=id+num+t[ans+len])num+=t[ans+=len];
}
return ans;
}
inline Node merge(const Node&a,const Node&b){
return Node(max(a.mx,b.mx),min(a.mi,b.mi));
}
inline void update(const int&u){
zkw[u]=merge(zkw[u<<1],zkw[u<<1|1]);
}
inline void Build(){
register int i;
for(G=1;G<=n+1;G<<=1);
for(i=1;i<=n;++i)zkw[G+i]=Node(a[i],a[i]);
for(i=G-1;i;--i)update(i);
}
inline void Modify(int id){
Add(id);
for(zkw[id+=G]=Node(),id>>=1;id;id>>=1)update(id);
}
inline Node Query(int L,int R){
Node ans=Node();
for(L+=G-1,R+=G+1;L^R^1;L>>=1,R>>=1){
if(~L&1)ans=merge(ans,zkw[L^1]);
if(R&1)ans=merge(ans,zkw[R^1]);
}
return ans;
}
signed main(){
register int i,x,L,R,opt;
scanf("%d%d",&n,&m);tmp=n;
for(i=1;i<=n;++i)scanf("%d",a+i);
while(tmp^(tmp&-tmp))tmp^=tmp&-tmp;Build();
for(i=1;i<=m;++i){
scanf("%d",&opt);
if(opt==1){
scanf("%d",&x);
Modify(Find(x-1)+1);
}
else{
scanf("%d%d",&L,&R);
it=Query(Find(L-1)+1,Find(R-1)+1);
printf("%d %d\n",it.mi,it.mx);
}
}
}
LGP6011题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- 获取公网ip,获取用户城市地址
<?php class GetIp { public static $api = 'http://ip.taobao.com/service/getIpInfo.php?ip='; public ...
- Yosemite下安装jdk、mysql、maven、idea
Mac OS X Yosemite已经在2014年10月17日正式发布了. 作为一个java开发者,尝鲜第一时间安装了最新版本. 和之前的OS X系统还是有很多不同的.下面主要在java开发环境方面做 ...
- Net6 DI源码分析Part4 CallSiteFactory ServiceCallSite
Net6 CallSiteFactory ServiceCallSite, CallSiteChain abstract class ServiceCallSite ServiceCallSite是个 ...
- 1Python运行Appium测试的例子
电脑系统配置:Windows7的64位 1.Python sample(Python示例)下载 https://github.com/appium/sample-code/tree/master/sa ...
- PyCharm编程软件详细安装教程
PyCharm编程软件安装教程&破解 一.官网下载软件 1. 网页搜索进入PyCharm官网下载页面(https://www.jetbrains.com/pycharm/download/ ) ...
- 《PHP程序员面试笔试宝典》——签约和违约需要注意哪些事情?
本文摘自<PHP程序员面试笔试宝典>. PHP面试技巧分享,PHP面试题,PHP宝典尽在"琉忆编程库". 经过了紧张激烈的笔试面试后,最后过五关斩六将,终于得到了用人单 ...
- c++ 聚合/POD/平凡/标准布局 介绍
目录 前言 聚合 POD(Plain Old Data) 平凡类型(TrivialType) 要求 平凡可复制(TrivialCopyable) 要求 对于某些函数的补充说明 平凡拷贝构造函数 符合条 ...
- axios请求方式
`// 使用默认进行请求(默认是get) axios({ url: "http://localhost:9999/student/student/getAllStudent" }) ...
- Kubernetes集群使用CentOS 7.6系统时kubelet日志含有“Reason:KubeletNotReady Message:PLEG is not healthy:”信息
问题描述 Kubernetes集群使用CentOS 7.6版本的系统时,kubelet日志中可能存在以下告警信息. Reason:KubeletNotReady Message:PLEG is not ...
- C#内联函数 特性 MethodImplOptions.AggressiveInlining)
[MethodImpl(MethodImplOptions.AggressiveInlining)] 内联函数 Impl:implement的缩写 内联函数 在计算机科学中,内联函数(有时称作在线函数 ...