问题标题: 酷町堂:刚打完你咕月赛,哭辽QwQ

0
0
已解决
黄子扬
黄子扬
初级天翼
初级天翼

B的正解到底是什么???时间原因连贪心都没写对

C后面的几个点怎么写啊,想线段树过Sub3但失败了

#include<bits/stdc++.h>
using namespace std;
bool tj[10005][10005],u[10005],t[5*500005];
int n,m,l[10005],r[10005],val[10005],a[10005],fl[10005],fr[10005],sum,flag,up[4*500005],mid,cnt;
void build(int rt,int l,int r)
{
    if(l==r)
    {
        t[rt]=1;
        return ;
    }
    int mid=(l+r)>>1;
    build(rt<<1,l,mid);
    build(rt<<1|1,mid+1,r);
    t[rt]=t[rt<<1]+t[rt<<1|1];
}
void push_down(int rt,int l,int r)
{
    if(up[rt])
    {
        int mid=(l+r)>>1;
        t[rt<<1]=up[rt]*(mid-l+1);
        t[rt<<1|1]=up[rt]*(r-mid);
        up[rt<<1]=up[rt];
        up[rt<<1|1]=up[rt];
        up[rt]=0;
    }
}
void update(int rt,int l,int r,int x,int y,int val)
{
    if(x<=l&&r<=y)
    {
        t[rt]=val*(r-l+1);
        up[rt]=val;
        return ;
    }
    if(up[rt])
    push_down(rt,l,r);
    int mid=(l+r)>>1;
    if(x<=mid)
        update(rt<<1,l,mid,x,y,val);
    if(y>mid)
        update(rt<<1|1,mid+1,r,x,y,val);
    t[rt]=t[rt<<1]+t[rt<<1|1];
}
void dfs(int k)
{
    if(sum>=10000000)
    {
        cout<<"-1"<<endl;
        exit(0);
    }
    if(k==n+1)
    {
        for(int i=0;i<=n;i++)
            cout<<a[i]<<" ";
        cout<<endl;
        exit(0);
    }
    for(int i=0;i<=n;i++)
    {
        if(!tj[k][i]&&!u[i]&&k>=fl[i]&&k<=fr[i])
        {
            sum++;
            u[i]=1;
            a[k]=i;
            dfs(k+1);
            u[i]=0;
        }
    }
}
int main()
{
    cin>>n>>m;
    build(1,1,n);
    t[0]=1;
    for(int i=0;i<=n;i++)
        fl[i]=0,fr[i]=n;
    for(int i=1;i<=m;i++)
    {
        cin>>l[i]>>r[i]>>val[i];
        if(val[i])
            flag=1;
    }
    if(flag)
    {
        for(int i=1;i<=m;i++)
        {
            for(int j=l[i];j<=r[i];j++)
                tj[j][val[i]]=1;
                for(int j=0;j<val[i];j++)
                {
                    if(l[i]>fl[j]) fl[j]=l[i];
                    if(r[i]<fr[j]) fr[j]=r[i];
                }
        }
        dfs(0);
    }
    else
    {
        for(int i=1;i<=m;i++)
            update(1,1,n,l[i],r[i],0);
        for(int i=0;i<=n;i++)
            if(t[i])
                mid=i;
        for(int i=1;i<mid;i++)
            cout<<++cnt<<" ";
        cout<<0<<" ";
        for(int i=mid+1;i<=n;i++)
            cout<<++cnt<<" ";
        cout<<endl;
    }
    return 0;
}

C的35分代码,望dalao指教QwQ

祭念一下第一次 div 1 的rank比 div 2好?,,,,

总而言之,还是wtcl


0
已采纳
赵逸凡
赵逸凡
初级启示者
初级启示者

线段树->不会&提交不了

用noip的IO流卡常吧

本题输入输出量较大,请注意使用效率较高的 IO 方式。

sub4听说可以玄学过

0
侯平仄
侯平仄
新手天翼
新手天翼

您还是恒强的,我T2的sub1还是最后时刻随机数+暴力搞过的,交了2、3页/kk

侯平仄在2020-10-06 20:45:11追加了内容

呸T3

我要回答