蓝书4.1-4.4 树状数组、RMQ问题、线段树、倍增求LCA
这章的数据结构题很真实
T1 排队 bzoj 1699
题目大意:
求静态一些区间的最大值-最小值
思路:
ST表裸题
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#define ll long long
#define inf 2139062143
#define MAXN 100100
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,q,g[MAXN],mn[MAXN][],mx[MAXN][];
int main()
{
n=read(),q=read();int a,b,t;
for(int i=;i<=n;i++) mn[i][]=mx[i][]=g[i]=read();
for(int j=;j<;j++)
for(int i=;i+(<<j)-<=n;i++)
mn[i][j]=min(mn[i][j-],mn[i+(<<(j-))][j-]),mx[i][j]=max(mx[i][j-],mx[i+(<<(j-))][j-]);
while(q--)
{
a=read(),b=read(),t=b-a+,t=(int)log2(t);
printf("%d\n",max(mx[a][t],mx[b-(<<t)+][t])-min(mn[a][t],mn[b-(<<t)+][t]));
}
}
T2 选择客栈 luogu 1311
题目大意:
每个点有两个值 颜色和最小消费值 如果两个点对之间存在一个点最小消费值<=n
求这样的点对的个数
思路:
把每个颜色分别用链表存起来 记录上一个<=p的位置
对于每个颜色分别遍历
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#define ll long long
#define inf 2139062143
#define MAXN 200100
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,k,p,g[MAXN],c[MAXN],tmp[],fst[],las,cnt,res,ans,l[MAXN],to[MAXN];
int main()
{
n=read(),k=read(),p=read();
for(int i=;i<=n;i++)
{
c[i]=read(),g[i]=read();
if(g[i]<=p) las=i;l[i]=las;
if(!tmp[c[i]]) fst[c[i]]=i,tmp[c[i]]=i;
else to[tmp[c[i]]]=i,tmp[c[i]]=i;
}
for(int i=,pos;i<k;i++)
{
pos=fst[i],cnt=,res=;
while(to[pos])
{
if(to[pos]>n) break;
if(l[to[pos]]>=pos) res=cnt;
ans+=res,cnt++,pos=to[pos];
}
}
printf("%d",ans);
}
T3 最大值 bzoj 1012
T4 花神游历各国 bzoj 3211
T5 维护序列 bzoj 1798
题目大意:
区间乘法和加法以及区间求和
思路:
维护两个tag 所有地方注意先乘后加
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#define ll long long
#define inf 2139062143
#define MAXN 100100
using namespace std;
inline ll read()
{
ll x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
ll n,MOD,tp[MAXN<<],tm[MAXN<<],sum[MAXN<<];
void build(int k,int l,int r)
{
tm[k]=;
if(l==r) {return ;}
int mid=(l+r)>>;
build(k<<,l,mid);build(k<<|,mid+,r);
}
inline void pshd(int k,int l,int mid,int r)
{
(sum[k<<]*=tm[k])%=MOD,(sum[k<<|]*=tm[k])%=MOD;
(tp[k<<]*=tm[k])%=MOD,(tp[k<<|]*=tm[k])%=MOD;
(tm[k<<]*=tm[k])%=MOD,(tm[k<<|]*=tm[k])%=MOD,tm[k]=;
(sum[k<<]+=tp[k]*(mid-l+)%MOD)%=MOD,(sum[k<<|]+=tp[k]*(r-mid)%MOD)%=MOD;
(tp[k<<]+=tp[k])%=MOD,(tp[k<<|]+=tp[k])%=MOD,tp[k]=;
}
inline void mdfm(int k,int l,int r,int a,int b,ll x)
{
if(l==a&&r==b){(sum[k]*=x)%=MOD,(tp[k]*=x)%=MOD,(tm[k]*=x)%=MOD;return ;}
int mid=(l+r)>>;
pshd(k,l,mid,r);
if(mid>=b) mdfm(k<<,l,mid,a,b,x);
else if(mid<a) mdfm(k<<|,mid+,r,a,b,x);
else {mdfm(k<<,l,mid,a,mid,x);mdfm(k<<|,mid+,r,mid+,b,x);}
sum[k]=(sum[k<<]+sum[k<<|])%MOD;
}
inline void mdfp(int k,int l,int r,int a,int b,ll x)
{
if(l==a&&r==b) {(sum[k]+=x*(r-l+)%MOD)%=MOD,tp[k]+=x;return ;}
int mid=(l+r)>>;
pshd(k,l,mid,r);
if(mid>=b) mdfp(k<<,l,mid,a,b,x);
else if(mid<a) mdfp(k<<|,mid+,r,a,b,x);
else {mdfp(k<<,l,mid,a,mid,x);mdfp(k<<|,mid+,r,mid+,b,x);}
sum[k]=(sum[k<<]+sum[k<<|])%MOD;
}
inline ll query(int k,int l,int r,int a,int b)
{
if(l==a&&r==b) return sum[k];
int mid=(l+r)>>;
pshd(k,l,mid,r);
if(mid>=b) return query(k<<,l,mid,a,b);
else if(mid<a) return query(k<<|,mid+,r,a,b);
else return (query(k<<,l,mid,a,mid)+query(k<<|,mid+,r,mid+,b))%MOD;
}
int main()
{
n=read(),MOD=read();int a,b,c;build(,,n);
for(int i=;i<=n;i++) mdfp(,,n,i,i,read());
int T=read();
while(T--)
{
a=read();
if(a==) {a=read(),b=read(),c=read();mdfm(,,n,a,b,c);}
else if(a==) {a=read(),b=read(),c=read();mdfp(,,n,a,b,c);}
else if(a==) {a=read(),b=read();printf("%lld\n",query(,,n,a,b));}
}
}
蓝书4.1-4.4 树状数组、RMQ问题、线段树、倍增求LCA的更多相关文章
- 【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...
- [Usaco2014 Open Gold ]Cow Optics (树状数组+扫描线/函数式线段树)
这道题一上手就知道怎么做了= = 直接求出原光路和从目标点出发的光路,求这些光路的交点就行了 然后用树状数组+扫描线或函数式线段树就能过了= = 大量的离散+模拟+二分什么的特别恶心,考试的时候是想到 ...
- bzoj4785:[ZJOI2017]树状数组:二维线段树
分析: "如果你对树状数组比较熟悉,不难发现可怜求的是后缀和" 设数列为\(A\),那么可怜求的就是\(A_{l-1}\)到\(A_{r-1}\)的和(即\(l-1\)的后缀减\( ...
- HDU - 1166 树状数组模板(线段树也写了一遍)
题意: 汉语题就不说题意了,用到单点修改和区间查询(树状数组和线段树都可以) 思路: 树状数组的单点查询,单点修改和区间查询. 树状数组是巧妙运用二进制的规律建树,建树就相当于单点修改.这里面用到一个 ...
- BZOJ 3110([Zjoi2013]K大数查询-区间第k大[段修改,在线]-树状数组套函数式线段树)
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 418 Solved: 235 [ Submit][ ...
- BZOJ 4785 [Zjoi2017]树状数组 | 二维线段树
题目链接 BZOJ 4785 题解 这道题真是令人头秃 = = 可以看出题面中的九条可怜把求前缀和写成了求后缀和,然后他求的区间和却仍然是sum[r] ^ sum[l - 1],实际上求的是闭区间[l ...
- 2019.01.21 bzoj2441: [中山市选2011]小W的问题(树状数组+权值线段树)
传送门 数据结构优化计数菜题. 题意简述:给nnn个点问有多少个www型. www型的定义: 由5个不同的点组成,满足x1<x2<x3<x4<x5,x3>x1>x2 ...
- HDU 4325 离散化+树状数组 或者 不使用树状数组
题意:给出一些花的开放时间段,然后询问某个时间点有几朵花正在开放. 由于ti<1e9,我们需要先将时间离散化,然后将时间点抽象为一个数组中的点,显然,我们需要进行区间更新和单点查询,可以考虑线段 ...
- 【BZOJ】1012: [JSOI2008]最大数maxnumber(树状数组+rmq)
http://www.lydsy.com/JudgeOnline/problem.php?id=1012 树状数组原来我只懂得sum和add的操作,今天才知道可以有求区间最值的操作,我学习了一下写了个 ...
- BZOJ_1012_[JSOI2008]_最大数maxnumber_(线段树/树状数组+RMQ)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1012 两种操作: 1.求序列末尾n个数中的最大值. 2.在序列末尾插入一个数. 分析 线段树求 ...
随机推荐
- Servlet中的几个重要的对象(转)
讲解四大类,ServletConfig对象,ServletContext对象.request对象,response对象 ServletConfig对象 获取途径:getServletConfig(); ...
- 集训第六周 数学概念与方法 J题 数论,质因数分解
Description Tomorrow is contest day, Are you all ready? We have been training for 45 days, and all g ...
- vim 编辑器使用法则
vim 编辑器使用法则 Vi编辑器有3种使用模式:一般模式.编辑模式和命令模式. $SHELL:查看当前默认shell类型 $BASH_VERSION:查看当前shell版本 3.一般模式: 光标移 ...
- hadoop_exporter+prometheus
1.准备工作 安装go.glibe(需要连google服务器,咋连的,我就不写了,因为尝试了各种办法,都失败了,很伤心) 2.下载hadoop_exporter cd /usr/local/prom/ ...
- windows10开启内置ubuntu系统,使用xshell连接
windows安装配置ubuntu系统内置子系统 官方文档:https://docs.microsoft.com/zh-cn/windows/wsl/about https://www.jianshu ...
- 如何实现IIS 7.0对非HTTP协议的支持
在<再谈IIS与ASP.NET管道>介绍各种版本的IIS的设计时,我们谈到IIS 7.0因引入WAS提供了对非HTTP协议的支持.这个对于WCF的服务寄宿来说意义重大,它意味着我们通过II ...
- node.js 写流 createWriteStream----由浅入深
createWriteStream 写流 基于fs模块 let fs=require("fs"); createWriteStream创建一个写流 我们先创建一个2.txt要写入的 ...
- MeepoPS基本使用方法
MeepoPS基本使用 MeepoPS是Meepo PHP Socket的缩写. 旨在提供高效稳定的由纯PHP开发的多进程SocketService. MeepoPS可以轻松构建在线实时聊天, 即时游 ...
- 用jQuery向div中添加Html文本内容
前台代码: <link href="http://www.cnblogs.com/Content/themes/base/jquery-ui.css" rel="s ...
- SQL SERVER代理作业删除失败问题
在SQL Server 2005上遇到了先删除已运行维护计划后,再删除代理中由其产生的作业时,提示删除失败. DELETE 语句与 REFERENCE 约束"FK_subplan_job ...