这章的数据结构题很真实

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的更多相关文章

  1. 【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询

    Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...

  2. [Usaco2014 Open Gold ]Cow Optics (树状数组+扫描线/函数式线段树)

    这道题一上手就知道怎么做了= = 直接求出原光路和从目标点出发的光路,求这些光路的交点就行了 然后用树状数组+扫描线或函数式线段树就能过了= = 大量的离散+模拟+二分什么的特别恶心,考试的时候是想到 ...

  3. bzoj4785:[ZJOI2017]树状数组:二维线段树

    分析: "如果你对树状数组比较熟悉,不难发现可怜求的是后缀和" 设数列为\(A\),那么可怜求的就是\(A_{l-1}\)到\(A_{r-1}\)的和(即\(l-1\)的后缀减\( ...

  4. HDU - 1166 树状数组模板(线段树也写了一遍)

    题意: 汉语题就不说题意了,用到单点修改和区间查询(树状数组和线段树都可以) 思路: 树状数组的单点查询,单点修改和区间查询. 树状数组是巧妙运用二进制的规律建树,建树就相当于单点修改.这里面用到一个 ...

  5. BZOJ 3110([Zjoi2013]K大数查询-区间第k大[段修改,在线]-树状数组套函数式线段树)

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec   Memory Limit: 512 MB Submit: 418   Solved: 235 [ Submit][ ...

  6. BZOJ 4785 [Zjoi2017]树状数组 | 二维线段树

    题目链接 BZOJ 4785 题解 这道题真是令人头秃 = = 可以看出题面中的九条可怜把求前缀和写成了求后缀和,然后他求的区间和却仍然是sum[r] ^ sum[l - 1],实际上求的是闭区间[l ...

  7. 2019.01.21 bzoj2441: [中山市选2011]小W的问题(树状数组+权值线段树)

    传送门 数据结构优化计数菜题. 题意简述:给nnn个点问有多少个www型. www型的定义: 由5个不同的点组成,满足x1<x2<x3<x4<x5,x3>x1>x2 ...

  8. HDU 4325 离散化+树状数组 或者 不使用树状数组

    题意:给出一些花的开放时间段,然后询问某个时间点有几朵花正在开放. 由于ti<1e9,我们需要先将时间离散化,然后将时间点抽象为一个数组中的点,显然,我们需要进行区间更新和单点查询,可以考虑线段 ...

  9. 【BZOJ】1012: [JSOI2008]最大数maxnumber(树状数组+rmq)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1012 树状数组原来我只懂得sum和add的操作,今天才知道可以有求区间最值的操作,我学习了一下写了个 ...

  10. BZOJ_1012_[JSOI2008]_最大数maxnumber_(线段树/树状数组+RMQ)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1012 两种操作: 1.求序列末尾n个数中的最大值. 2.在序列末尾插入一个数. 分析 线段树求 ...

随机推荐

  1. mysql性能优化工具mysqltuner使用

    1.下载:wget --no-check-certificate https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysq ...

  2. Linux CentOS7.5静默安装Oracle11gR2

    网上有很多安装教程,但大多不够完整,参照了一些教程,实测安装成功,整理出来分享给大家! 一.官方最低要求配置 内存:1G(官方最低要求1G) 硬盘:40G(企业版安装所需4.29G和1.7G数据文件) ...

  3. jsp include html 乱码问题解决

    方法一: 在被包含的html中,在首行加上 <%@ page language="java" import="java.util.*" pageEncod ...

  4. python链家网高并发异步爬虫and异步存入数据

    python链家网二手房异步IO爬虫,使用asyncio.aiohttp和aiomysql 很多小伙伴初学python时都会学习到爬虫,刚入门时会使用requests.urllib这些同步的库进行单线 ...

  5. MySQL-----多对多

    多对多: 示例1: 用户表和相亲记录表 用户表 用户id 用户名                  性别 1 George  男 2 Elizabeth 女 3 Bruce 男 4 Catherine ...

  6. pip 打包项目配置库

    打包项目中配置库(filename为文件名,可修改) pip freeze > filename.txt 安装配置文件中所有的库包 pip install -r filename.txt 如提示 ...

  7. Java 集合相关

    对整个体系做一个记录,并不涉及详细应用 Object类 1. 重写toString方法 System.out.println可以打印任何对象在于Object类拥有一个方法 public String ...

  8. Android二级缓存之物理存储介质上的缓存DiskLruCache

     Android二级缓存之物理存储介质上的缓存DiskLruCache Android DiskLruCache属于物理性质的缓存,相较于LruCache缓存,则DiskLruCache属于And ...

  9. HDU-3790最短路径问题,第十遍终于过了~

    最短路径问题                                                                   Time Limit: 2000/1000 MS (J ...

  10. struts面试题及答案【重要】

    1. 简述 Struts2 的工作流程: ①. 请求发送给 StrutsPrepareAndExecuteFilter ②. StrutsPrepareAndExecuteFilter 判定该请求是否 ...