RT,我想过前两个Subtask,结果爆炸了。
找不出问题,求助!(我好菜啊)
顺便求正解,Sol看不懂
#include <stdio.h>
inline int read()
{
int num=0;char c=getchar();
while(c<48||c>57)c=getchar();
while(c>=48&&c<=57)num=num*10+(c^48),c=getchar();
return num;
}
inline int min(int a,int b){return a<b?a:b;}
inline int max(int a,int b){return a>b?a:b;}
int l[2000005],r[2000005];
#include <string.h>
int main()
{
freopen("myth.in","r",stdin);
freopen("myth.out","w",stdout);
int T=read();
while(T--)
{
int n=read();
/*if(T==25)
{
printf("%d\n",n);
for(int i=0;i<3*n;i++)
{
int x=read();
printf("%d ",x);
if(i%3==2)puts("");
}
continue;
}*/
memset(l,-1,sizeof(int)*(n+3));
memset(r,0x3f,sizeof(int)*(n+3));
for(int ii=0;ii<n;ii++)
{
int x=read(),y=read(),d=read();
if(d==1)
{
for(int i=x;i<=n+1;i++)r[i]=min(y,r[i]);
}
else if(d==2)
{
for(int i=0;i<=x;i++)r[i]=min(y,r[i]);
}
else if(d==3)
{
for(int i=0;i<=x;i++)l[i]=max(y,l[i]);
}
else
{
for(int i=x;i<=n+1;i++)l[i]=max(y,l[i]);
}
}
// puts("");
for(int i=0;i<=n+1;i++)
{
// printf("%d: %d %d\n",i,l[i],r[i]);
if(l[i]+1<r[i])
{
puts("No");
break;
}
if(i==n+1)puts("Yes");
}
}
return 0;
}