社区讨论

T3个点,比纯暴力还慢...

P3740[HAOI2014] 贴海报参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mi6hlbn9
此快照首次捕获于
2025/11/20 05:00
4 个月前
此快照最后确认于
2025/11/20 05:00
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
#define N 10000001
using namespace std;
int n,m,flag,ans=0,a[N],b[N],X[N<<2];
int gi()
{
    int x=0,w=1;char ch=getchar();
    while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
    if (ch=='-') w=-1,ch=getchar();
    while (ch>='0'&&ch<='9')
    {
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*w;
}
void update(int i,int l,int r,int L,int R)
{
    if(X[i]) return;//如果已经被染,返回
    if(L<=l&&r<=R)
    {
        flag=1;
        X[i]=1;
        return;
    }
    if(l==r) return ;
    int mid=(l+r)>>1;
    if(R<=mid) update(i<<1,l,mid,L,R);
    else if(mid<L) update(i<<1|1,mid+1,r,L,R);
    else update(i<<1,l,mid,L,R),update(i<<1|1,mid+1,r,L,R);
    X[i]=X[i<<1]&X[i<<1|1];
    return ;
}
int main()
{
    n=gi();m=gi();
    for(int i=1;i<=m;i++)
      a[i]=gi(),b[i]=gi();
    for(int i=n;i>=1;i--) //从后往前贴,越后面的能看见的几率越大
    {
        flag=0;
        update(1,1,n,a[i],b[i]);
        if(flag) ans++;
    }
    cout<<ans;
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...