hdu 2528 Mayor's posters(线段树+离散化)

来源:互联网 发布:百度网络硬盘登陆 编辑:程序博客网 时间:2024/06/05 15:10

参考:http://blog.csdn.net/non_cease/article/details/7383736
https://wenku.baidu.com/view/71fc1659ba1aa8114431d97b.html

第一次做线段树离散化的题目。。。。
wa了好多次,才发现是数组开小了。。

#include <cstdio>#include <cstring>#include <algorithm>const int MAXN = 11010;int li[MAXN],ri[MAXN];int x[MAXN*3];int col[MAXN<<4];bool hash[MAXN];int cnt;int binSearch(int l, int r, int val){    int lb = l;    int ub = r-1;    while(lb <= ub)    {        int mid = (lb+ub)/2;        if(x[mid] < val) lb = mid+1;        else if(x[mid] > val) ub = mid-1;        else return mid;    }    return -1;}void pushDown(int rt){    if(col[rt] != -1)    {        col[rt<<1] = col[rt<<1|1] = col[rt];        col[rt] = -1;    }}void insert(int L, int R, int c, int l, int r, int rt){    if(L <= l && r <= R)    {        col[rt] = c;        return;    }    pushDown(rt);    int mid = (l+r) >> 1;    if(L <= mid) insert(L,R,c,l,mid,rt<<1);    if(R > mid) insert(L,R,c,mid+1,r,rt<<1|1);}void query(int l, int r, int rt){    if(col[rt] != -1)    {        if(!hash[col[rt]])        {            hash[col[rt]] = true;            ++cnt;        }        return;    }    if(l == r) return;    int mid = (l+r) >> 1;    query(l,mid,rt<<1);    query(mid+1,r,rt<<1|1);}int main(){    int t,n;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        int nn = 0;        for(int i = 0; i < n; ++i)        {            scanf("%d %d",&li[i],&ri[i]);            x[nn++] = li[i];            x[nn++] = ri[i];        }        std::sort(x,x+nn);        int m = std::unique(x,x+nn)-x;        for(int i = m-1; i > 0; --i)            if(x[i] != x[i-1] + 1) x[m++] = x[i-1]+1;        std::sort(x,x+m);        memset(col,-1,sizeof(col));        for(int i = 0; i < n; ++i)        {            int l = binSearch(0,m,li[i]);            int r = binSearch(0,m,ri[i]);            //离散化坐标后,就是从0开始的了            insert(l,r,i,0,m,1);        }        memset(hash,false,sizeof(hash));        cnt = 0;        query(0,m,1);        printf("%d\n",cnt);    }    return 0;}
0 0
原创粉丝点击