怒刷30道線段樹、樹狀數組

來源:互聯網
上載者:User

標籤:blog   os   io   for   2014   ar   amp   size   

HDU 1754 單點更新,區間查詢最大值,水題……

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<map>#include<queue>#include<set>#include<cmath>#include<bitset>#define mem(a,b) memset(a,b,sizeof(a))#define lson i<<1,l,mid#define rson i<<1|1,mid+1,r#define INF 1000000#define maxn 1000010using namespace std;typedef long long ll;typedef unsigned long long ull;int Max[maxn],a[200005],n,m,i;void pushup(int i){    Max[i]=max(Max[i<<1],Max[i<<1|1]);}void build(int i,int l,int r){    if(l==r)    {        Max[i]=a[l];        return ;    }    int mid=(l+r)>>1;    build(lson);build(rson);    pushup(i);}void update(int i,int l,int r,int x,int v){    if(l==r&&l==x)    {        Max[i]=v;        return ;    }    int mid=(l+r)>>1;    if(x<=mid) update(lson,x,v);    else update(rson,x,v);    pushup(i);}int query(int i,int l,int r,int L,int R){    if(L<=l&&r<=R) return Max[i];    int mid=(l+r)>>1,ans=0;    if(L<=mid) ans=max(ans,query(lson,L,R));    if(R>mid) ans=max(ans,query(rson,L,R));    return ans;}int main(){    while(~scanf("%d%d",&n,&m))    {        for(i=1;i<=n;i++)            scanf("%d",a+i);        build(1,1,n);        int x,y;        char str[3];        while(m--)        {            scanf("%s%d%d",str,&x,&y);            if(str[0]=='Q')                printf("%d\n",query(1,1,n,x,y));            else update(1,1,n,x,y);        }    }    return 0;}

HDU 1698 區間更新,區間查詢,lazy標記種類,水……

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<map>#include<queue>#include<set>#include<cmath>#include<bitset>#define mem(a,b) memset(a,b,sizeof(a))#define lson i<<1,l,mid#define rson i<<1|1,mid+1,r#define INF 1000000#define maxn 400010using namespace std;typedef long long ll;typedef unsigned long long ull;int sum[maxn],lazy[maxn],n,q;void pushup(int i){    sum[i]=sum[i<<1]+sum[i<<1|1];}void pushdown(int i,int l,int r){    if(lazy[i])    {        int mid=(l+r)>>1;        lazy[i<<1]=lazy[i<<1|1]=lazy[i];        sum[i<<1]=(mid-l+1)*lazy[i<<1];        sum[i<<1|1]=(r-mid)*lazy[i<<1|1];        lazy[i]=0;    }}void update(int i,int l,int r,int L,int R,int v){    if(l==L&&r==R)    {        sum[i]=(r-l+1)*v;        lazy[i]=v;        return ;    }    int mid=(l+r)>>1;    pushdown(i,l,r);    if(R<=mid) update(lson,L,R,v);    else if(L>mid) update(rson,L,R,v);    else    {        update(lson,L,mid,v);        update(rson,mid+1,R,v);    }    pushup(i);}void build(int i,int l,int r){    if(l==r)    {        sum[i]=1;        lazy[i]=1;        return ;    }    sum[i]=lazy[i]=0;    int mid=(l+r)>>1;    build(lson);build(rson);    pushup(i);}int main(){    int t;    cin>>t;    for(int i=1;i<=t;i++)    {        scanf("%d%d",&n,&q);        build(1,1,n);        int l,r,v;        while(q--)        {            scanf("%d%d%d",&l,&r,&v);            update(1,1,n,l,r,v);        }        printf("Case %d: The total value of the hook is %d.\n",i,sum[1]);    }    return 0;}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.