蓝书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.在序列末尾插入一个数. 分析 线段树求 ...
随机推荐
- mysql性能优化工具mysqltuner使用
1.下载:wget --no-check-certificate https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysq ...
- Linux CentOS7.5静默安装Oracle11gR2
网上有很多安装教程,但大多不够完整,参照了一些教程,实测安装成功,整理出来分享给大家! 一.官方最低要求配置 内存:1G(官方最低要求1G) 硬盘:40G(企业版安装所需4.29G和1.7G数据文件) ...
- jsp include html 乱码问题解决
方法一: 在被包含的html中,在首行加上 <%@ page language="java" import="java.util.*" pageEncod ...
- python链家网高并发异步爬虫and异步存入数据
python链家网二手房异步IO爬虫,使用asyncio.aiohttp和aiomysql 很多小伙伴初学python时都会学习到爬虫,刚入门时会使用requests.urllib这些同步的库进行单线 ...
- MySQL-----多对多
多对多: 示例1: 用户表和相亲记录表 用户表 用户id 用户名 性别 1 George 男 2 Elizabeth 女 3 Bruce 男 4 Catherine ...
- pip 打包项目配置库
打包项目中配置库(filename为文件名,可修改) pip freeze > filename.txt 安装配置文件中所有的库包 pip install -r filename.txt 如提示 ...
- Java 集合相关
对整个体系做一个记录,并不涉及详细应用 Object类 1. 重写toString方法 System.out.println可以打印任何对象在于Object类拥有一个方法 public String ...
- Android二级缓存之物理存储介质上的缓存DiskLruCache
Android二级缓存之物理存储介质上的缓存DiskLruCache Android DiskLruCache属于物理性质的缓存,相较于LruCache缓存,则DiskLruCache属于And ...
- HDU-3790最短路径问题,第十遍终于过了~
最短路径问题 Time Limit: 2000/1000 MS (J ...
- struts面试题及答案【重要】
1. 简述 Struts2 的工作流程: ①. 请求发送给 StrutsPrepareAndExecuteFilter ②. StrutsPrepareAndExecuteFilter 判定该请求是否 ...