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