码迷,mamicode.com
首页 > 其他好文 > 详细

【HAOI】贴海报

时间:2019-09-01 22:00:36      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:stdout   getch   tail   etc   out   getchar   getc   define   ++   

MZOJ贴海报

.......我真的没带脑子在打

忘了pup

然后数字个数应该为m=unique(c+1,c+cnt+1)-c;
然而我是unique(c+1,c+cnt+1)-c;m=lower_bound(c,c+cnt+1,inf)-c; ..........

数组大小也开小了.....

心好累.........

非要离散化版
#include
using namespace std;
#define ll long long
#define lson (o<<1)
#define rson (o<<1|1)
const int N=1000+5,M=1000000+5,inf=0x3f3f3f3f;
int n,m,a[N],b[N],c[N<<2],cnt,ans;
bool yes,tree[N<<4];
template void rd(t &x){
    x=0;int w=0;char ch=0;
    while(!isdigit(ch)) w|=ch==‘-‘,ch=getchar();
    while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    x=w?-x:x;
}
void pup(int o){tree[o]=tree[lson]&&tree[rson];}
void mdf(int o,int l,int r,int x,int y){
    if(l > y||r < x) return;
    if(tree[o]) return;
    if(x < = l&&r < = y){yes=1,tree[o]=1;return;}
    int mid=l+r>>1;
    mdf(lson,l,mid,x,y),mdf(rson,mid+1,r,x,y);
    pup(o);//!!!!!!!!!!!!!!!!!!!!
}
int main(){
    freopen("in.txt","r",stdin);
//  freopen("numbers.out","w",stdout);
    int T;rd(T);
    while(T--){
        ans=cnt=0; 
        memset(tree,0,sizeof(tree));
        rd(n);
        c[++cnt]=inf,c[++cnt]=0;
        for(int i=1;i < =n;++i)
        rd(a[i]),rd(b[i]),c[++cnt]=a[i],c[++cnt]=a[i]+1,c[++cnt]=b[i],c[++cnt]=b[i]+1;
        sort(c+1,c+cnt+1);m=unique(c+1,c+cnt+1)-c;
    //  m=lower_bound(c,c+cnt+1,inf)-c;
        for(int i=n,x,y;i;--i){
            x=lower_bound(c+1,c+m+1,a[i])-c;
            y=lower_bound(c+1,c+m+1,b[i])-c;
            yes=0;
            mdf(1,1,m,x,y);
            if(yes) ++ans;
        }
        printf("%d\n",ans);
    } 
    return 0;
}
    

【HAOI】贴海报

标签:stdout   getch   tail   etc   out   getchar   getc   define   ++   

原文地址:https://www.cnblogs.com/lxyyyy/p/11443661.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!