日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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

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;
}




生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日韩欧美精品一区 | 不卡影院| 国产一区二区欧美 | 男人操女人视频网站 | 成人激情在线 | 国产福利一区二区三区 | 亚洲最大成人av | 国产精品日本一区二区不卡视频 | 精品欧美一区二区三区久久久 | 男女深夜网站 | 日韩成人影院 | 国产精品自在线 | 国产午夜免费 | 成人不卡 | 国产一区二区三区视频在线观看 | 亚洲综合区 | 亚洲国产aⅴ成人精品无吗 天天草比 | 免费成人高清在线视频 | 99精品全国免费观看视频软件 | 尤物最新网址 | 黄a视频在线观看 | 成人污污视频 | 国产suv精品一区二区四 | 国产精品久久久久久妇女 | av一区二区三区四区 | 视频在线播放国产 | 欧美日韩电影在线 | 婷婷综合五月天 | 99re6在线视频精品免费 | 男女的隐私视频网站 | 日本精a在线观看 | 91在线一区二区三区 | 国产999精品久久久 亚洲视频二区 | 国产成人精品a视频一区www | 中文字幕成人在线 | 久久久91精品国产一区二区三区 | 日韩精品在线观看视频 | 91色在线视频 | 丁香六月婷婷 | 欧美人与性动交α欧美精品济南到 | 日韩国产专区 |