ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Data Structure

2021-12-17 23:00:17  阅读:139  来源: 互联网

标签:rt return int ans 10000 array Data Structure


单调栈:

#include<bits/stdc++.h>
using namespace std;

懒得写,放个头文件看着整齐。

 

ST表:

#include<bits/stdc++.h>
using namespace std;

int n,m;
int a[1000005][22];
int query(int l,int r)
{
    int k=log2(r-l+1);
    return max(a[l][k],a[r-(1<<k)+1][k]);
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i][0]);
    }
    for(int j=1;j<=21;j++)
    {
        for(int i=1;i+(1<<j)-1<=n;i++)
        {
            a[i][j]=max(a[i][j-1],a[i+(1<<(j-1))][j-1]);
        }
    }
    for(int i=0;i<m;i++)
    {
        int l,r;
        scanf("%d %d",&l,&r);
        printf("%d\n",query(l,r));
    }
    return 0;
}

 

树状数组:

int n,a[10000],c[10000];//a is the original array and c is the tree array
int lowbit(int x)
{
    return x&(-x);
}
void updata(int i,int k)//add k to pos[i] of  original array 
{
    while(i<=n)
    {
        c[i]+=k;
        i+=lowbit(i);
    }
}
int getsum(int i)//get the sum of from a[1] to a[i]
{
    int ans=0;
    while(i>0)
    {
        ans+=c[i];
        i-=lowbit(i);
    }
    return ans;
}

 

线段树:

#define maxn 100007
int sum[maxn<<2],a[maxn];
void merge(int rt)
{
    sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void build(int l,int r,int rt)
{
    if(l==r)
    {
        sum[rt]=a[l];return;
    }
    int m=(l+r)>>1;
    build(l,m,rt<<1);
    build(m+1,r,rt<<1|1);
    merge(rt);
}
void update(int x,int c,int l,int r,int rt)//a[x]+=c
{
    if(l==r)
    {
        sum[rt]+=c;return;
    }
    int m=(l+r)>>1;
    if(x<=m) update(x,c,l,m,rt<<1);
    else update(x,c,m+1,r,rt<<1|1);
    merge(rt);
}
int getsum(int L,int R,int l,int r,int rt)
{
    if(L<=l&&R>=r) return sum[rt];
    int m=(l+r)>>1,ans=0;
    if(L<=m) ans+=getsum(L,R,l,m,rt<<1);
    if(R>m) ans+=getsum(L,R,m+1,r,rt<<1|1);
    return ans;
}

 

标签:rt,return,int,ans,10000,array,Data,Structure
来源: https://www.cnblogs.com/Zhangxichen/p/15681108.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有