来一波数据结构

Posted zhouzhihao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了来一波数据结构相关的知识,希望对你有一定的参考价值。

树状数组

#include<bits/stdc++.h>
using namespace std;
const int MAX=5e5+5;
int n,m,c[MAX];
int lowbit(int x)

    return x&-x;

void update(int a,int b)

    while(a<=n)
    
        c[a]+=b;
        a+=lowbit(a);
     

int sum(int x)

    int ans=0;
    while(x>0)
    
        ans+=c[x];
        x-=lowbit(x);
    
    return ans;

int main()

    cin>>n>>m;
    for(int i=1;i<=n;i++)
    
        int x;
        cin>>x;
        update(i,x);
    
    for(int i=1;i<=m;i++)
    
        int k,a,b;
        scanf("%d%d%d",&k,&a,&b);
        if(k==2)
        printf("%d\n",sum(b)-sum(a-1));
        else
        update(a,b);
    

    return 0;

ST表(RMQ问题)

#include<bits/stdc++.h>
using namespace std;
const int MAX=1e6,LOG=25;
int n,m;
int f[MAX][LOG],logg[MAX];
inline int read()

    int ans=0,f=1;
    char c;
    c=getchar();
    while(c<0 || c>9)
    
        if(c==-)
        f=-1;
        c=getchar();
    
    while(c>=0 && c<=9)
    
        ans=ans*10+c-0;
        c=getchar();
    
    return ans*f;

void init()

    n=read(),m=read();
    for(int i=1;i<=n;i++)
        f[i][0]=read();
    
    logg[0]=-1;
    for(int i=1;i<=n;i++)
        logg[i]=logg[i>>1]+1;

void st()

    for(int j=1;j<=LOG;j++)
        for(int i=1;i+(1<<j)-1<=n;i++)
            f[i][j]=max(f[i][j-1],f[i+(1<<j-1)][j-1]);

int main()

    init();
    st();
    for(int i=1;i<=m;i++)
    
        int x,y;
        x=read(),y=read();
        int s=logg[y-x+1];
        printf("%d\n",max(f[x][s],f[y-(1<<s)+1][s]));
    
    return 0;

 

以上是关于来一波数据结构的主要内容,如果未能解决你的问题,请参考以下文章

【VuePress02】config配置走一波

认知商业第一波来了,IBM营销云落地中国

学习一波redis

世界杯来了!看我大Python分析一波!四强会是哪是个国家!

一波数据结构

又一波你可能不知道的 Linux 命令行网络监控工具