60分求助

P3740 [HAOI2014] 贴海报

ezoiHQM @ 2017-12-27 19:28:50

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int T,n,ans,cnt,tot,Segment_tree[100010],lazy_tag[100010],Left[10010],Right[10010];
bool _t[10000010];
struct node{
    bool ck;
    int color,x;
    bool operator<(const node&a)const{
        return x<a.x;
    }
}_p[20010];
void pushdown(int o){
    if(lazy_tag[o]){
        lazy_tag[o<<1]=Segment_tree[o<<1]=lazy_tag[o<<1|1]=Segment_tree[o<<1|1]=lazy_tag[o];
        lazy_tag[o]=0;
    }
}
void updata(int o,int l,int r,int L,int R,int x){
    if(L<=l&&r<=R){
        lazy_tag[o]=x;
        Segment_tree[o]=x;
        return;
    }
    pushdown(o);
    int mid=(l+r)>>1;
    if(L<=mid)
        updata(o<<1,l,mid,L,R,x);
    if(R>mid)
        updata(o<<1|1,mid+1,r,L,R,x);
    Segment_tree[o]=0;
}
void query(int o,int l,int r){
    if(Segment_tree[o]){
        _t[Segment_tree[o]]=1;
        return;
    }
    pushdown(o);
    int mid=(l+r)>>1;
    query(o<<1,l,mid);
    query(o<<1|1,mid+1,r);
}
int main(){
    scanf("%d",&T);
    while(T--){
        memset(Segment_tree,0,sizeof(Segment_tree));
        memset(_t,0,sizeof(_t));
        memset(lazy_tag,0,sizeof(lazy_tag));
        tot=cnt=ans=0;
        scanf("%*d%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&_p[++cnt].x);
            scanf("%d",&_p[++cnt].x);
            _p[cnt-1].color=_p[cnt].color=i;
            _p[cnt-1].ck=0;
            _p[cnt].ck=1;
        }
        sort(_p+1,_p+cnt+1);
        _p[1].ck?Right[_p[1].color]=++tot:Left[_p[1].color]=++tot;
        for(int i=2;i<=cnt;i++){
            if(_p[i].x!=_p[i-1].x)
                ++tot;
            _p[i].ck?Right[_p[i].color]=tot:Left[_p[i].color]=tot;
        }
        for(int i=1;i<=n;i++)
            updata(1,1,tot,Left[i],Right[i],i);
        query(1,1,tot);
        for(int i=1;i<=n;i++)
            if(_t[i])
                ++ans;
        printf("%d\n",ans);
    }
    return 0;
}

by ezoiHQM @ 2017-12-27 19:30:42

打错了,T的输入和最外层的while循环是没有的,还有读入n之前漏了一个%*d,因为原本要在学校的oj上交,有一点点不同


by heyichong @ 2017-12-27 19:42:11

我也救不了你啊!

by ezoiHQM @ 2017-12-27 20:37:23

- 那你别说话


by ezoiHQM @ 2017-12-27 21:07:47

  1. 没有神犇来看看吗

by Haishu @ 2018-04-11 22:59:06

同60问


by redegg @ 2018-07-11 16:34:15

线段树有种思路根本不用查询的,但是我只比你们多了10分,,,70路过


by _JC_ @ 2018-08-10 15:46:25

可怕,我也60


by Zechariah @ 2018-10-15 22:56:26

为什么会WA啊,60想不通


by Zechariah @ 2018-10-15 23:27:43

明白了,离散化以后中间有一部分可能没了...答案就会少
1
3
1 10
1 4
7 10
所以要把每个r+1也加到离散化的数组里


by Error_666 @ 2019-07-09 15:35:58

@Zechariah 感谢大佬的样例。但是为什么要把r + 1加到离散化数组里呢?可以具体说说吗?感谢!


| 下一页