poj 3468 A Simple Problem with Integers[線段樹 ]

來源:互聯網
上載者:User

把這幾天做的線段樹都貼下...表示是跟著hh走的,,,

貼海報,,,還是成段更新.

範圍有點大,離散化操作.

最後能看見幾張,查詢..

參考:

#include <iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define maxn 40005int li[maxn],ri[maxn];int res[maxn*3];//int col[maxn<<4];bool hash[maxn];int cnt;int cmp(const void *a , const void *b){return *(int *)a - *(int *)b;}void pushdown(int rt){    if(col[rt]!=-1){        col[rt<<1]=col[rt<<1|1]=col[rt];        col[rt]=-1;    }}void update(int L,int R,int c,int l,int r,int rt){    if(l>=L&&r<=R){        col[rt]=c;        return ;    }    pushdown(rt);    int m=(l+r)>>1;    if(L<=m) update(L,R,c,lson);    if(R>m) update(L,R,c,rson);}int bin(int key,int n,int res[]){    int l=0;    int r=n-1;    while(l<=r){        int m=(l+r)>>1;        if(res[m]==key) return m;        if(key<=res[m]) r=m-1;        else  l=m+1;    }    return -1;}void query(int l,int r,int rt){    if(col[rt]!=-1){        if(!hash[col[rt]]) cnt++;        hash[col[rt]]=true;        return;    }    if(l==r) return ;    int m=(l+r)>>1;    query(lson);    query(rson);}int main(){    int T;    int n,m;    scanf("%d",&T);    m=0;while(T--){    scanf("%d",&n);    for(int i=0;i<n;i++){scanf("%d%d",&li[i],&ri[i]);        res[m++]=li[i];        res[m++]=ri[i];    }    qsort(res,m,sizeof(res[0]),cmp);    int t=1;    for(int i=1;i<m;i++)        if(res[i]!=res[i-1])            res[t++]=res[i];    for(int i=t-1;i>0;i--){       if(res[i]!=res[i-1]+1)            res[t++]=res[i-1]+1;    }    qsort(res,t,sizeof(res[0]),cmp);    memset(col,-1,sizeof(col));    for(int i=0;i<n;i++){       int l=bin(li[i],t,res);       int r=bin(ri[i],t,res);       update(l,r,i,0,t,1);    }    cnt=0;    memset(hash,false,sizeof(hash));    query(0,t,1);    printf("%d\n",cnt);}    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.