多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > HDU 1556 Color the ball【線段樹區間更新,一次查詢+數組模擬】

HDU 1556 Color the ball【線段樹區間更新,一次查詢+數組模擬】

來源:程序員人生   發布時間:2017-02-07 09:22:10 閱讀次數:3557次

Color the ball

Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 18104    Accepted Submission(s): 9032


Problem Description
N個氣球排成1排,從左到右順次編號為1,2,3....N.每次給定2個整數a b(a <= b),lele便為騎上他的“小飛鴿"牌電動車從氣球a開始到氣球b順次給每一個氣球涂1次色彩。但是N次以后lele已忘記了第I個氣球已涂過幾次色彩了,你能幫他算出每一個氣球被涂過幾次色彩嗎?
 

Input
每一個測試實例第1行動1個整數N,(N <= 100000).接下來的N行,每行包括2個整數a b(1 <= a <= b <= N)。
當N = 0,輸入結束。
 

Output
每一個測試實例輸出1行,包括N個整數,第I個數代表第I個氣球總共被涂色的次數。
 

Sample Input
3 1 1 2 2 3 3 3 1 1 1 2 1 3 0
 

Sample Output
1 1 1 3 2 1
 

Author
8600
 

Source
HDU 2006⑴2 Programming Contest

原題鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1556

此題用1般的方法絕對TLE,但是也有高手用數組摹擬過了的,后面也會附上代碼,用線段樹來解決是不錯的選擇。此題可以說是線段樹區間更新的入門題吧,由于更新的時候不1定每次都要更新到每一個葉子節點。詳見代碼。


AC代碼:

#include <cstdio>
#include <iostream>
#include <cstring>

using namespace std;
const int maxn=100000+5;
struct Node
{
    int l,r,cnt;
} node[maxn<<2];

void BuildTree(int l,int r,int k)
{
    node[k].l=l;
    node[k].r=r;
    node[k].cnt=0;
    if(l==r)
        return;
    int mid=(l+r)>>1;
    BuildTree(l,mid,k<<1);
    BuildTree(mid+1,r,k<<1|1);
}
void UpdateTree(int l,int r,int k)
{
    //只需要在這個區間+1就好了,節省時間,不用找到每一個數
    if(node[k].l==l&&node[k].r==r)
    {
        node[k].cnt+=1;
        return;
    }
    int mid=(node[k].l+node[k].r)>>1;
    if(r<=mid)
        UpdateTree(l,r,k<<1);
    else if(l>mid)
        UpdateTree(l,r,k<<1|1);
    else
    {
        UpdateTree(l,mid,k<<1);
        UpdateTree(mid+1,r,k<<1|1);
    }
}

void QueryTree(int k,int sum)
{
    //由于非葉子節點會記錄其子節點的值,
    //上面留的'坑',并不是所有的葉子節點均被更新
    //這也是區間更新的特點
    //此題只有1次查詢,所以可以這樣寫
    if(node[k].l==node[k].r)
    {
        if(node[k].l!=1)
            printf(" ");
        printf("%d",node[k].cnt+sum);
        return;
    }
    QueryTree(k<<1,node[k].cnt+sum);
    QueryTree(k<<1|1,node[k].cnt+sum);
}

int main()
{
    int n;
    while(cin>>n,n)
    {
        int x,y;
        //memset(node,0,sizeof(node));
        BuildTree(1,n,1);
        for(int i=0; i<n; i++)
        {
            scanf("%d%d",&x,&y);
            UpdateTree(x,y,1);
        }
        QueryTree(1,0);
        cout<<endl;
    }
    return 0;
}

數組摹擬AC代碼:

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=100000+5;
int a[maxn];
int main()
{
    int n;
    while(cin>>n,n)
    {
        int x,y;
        memset(a,0,sizeof(a));
        for(int i=0;i<n;i++)
        {
            cin>>x>>y;
            a[x]++;
            a[y+1]--;
        }
        cout<<a[1];
        for(int i=2;i<=n;i++)
        {
            a[i]+=a[i⑴];
            cout<<" "<<a[i];
        }
        cout<<endl;
    }
    return 0;
}




生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲精品自拍愉拍第二页 | 欧美一区二区二区 | 国产精品一区欧美激情 | 日本特级aⅴ一级毛片 | 一二三四高清在线手机视频 | a级毛毛片看久久 | 小草在线免费视频 | 日韩欧美h | 一区二区三区精品国产欧美 | 亚洲精品综合一二三区在线 | 亚洲天堂免费在线 | 成人污片| 美日韩中文字幕 | 日韩精品一区二区三区高清 | 亚洲欧美一二三区 | 亚洲熟乱| bt 自拍 另类 综合 欧美 | 羞羞视频免费观看网站 | 欧美国产一区二区三区 | 国产成人亚洲精品无广告 | 成人免费视频一区 | 日本高清中文字幕视频在线 | 在线观看视频亚洲 | 亚洲精品一二三区-久久 | 国产美女啪啪 | 成人精品一区二区三区校园激情 | 亚洲伊人成综合网 | 亚洲天堂免费 | www日本视频 | 亚州成人 | 一本久道久久综合婷婷五 | 欧美另类bbw| 久久精品一区二区三区四区 | 成 人 亚洲 综合天堂 | 亚洲三级成人 | 五月天中文网 | japanese18日本护士 | 精品国产国产综合精品 | 亚洲第99页 | 国产成人精品男人免费 | 国产深夜福利在线观看网站 |