⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1436.txt

📁 北大ACM题目例程 详细的解答过程 程序实现 算法分析
💻 TXT
字号:


#include"iostream.h"
#include"memory.h"
#include"algorithm"
using namespace std;

int y1[8000],y2[8000],x[8000],index[8000];
int l[16000],n;
int *edge[8000];

int cmp(int a,int b)
{return x[a]<x[b];}

void init()
{int i;

cin>>n;

//memset(edge,0,n*sizeof(int *));

for(i=0;i<n;i++)
{cin>>y1[i]>>y2[i]>>x[i];
y1[i]*=2;y2[i]*=2;
index[i]=i;}

sort(&index[0],&index[n],cmp);

}

void built()
{char sign[8000];int i,j,num;

memset(l,-1,16000*sizeof(int));
for(i=0;i<n;i++)
{	memset(sign,0,8000*sizeof(char));

	for(j=y1[index[i]];j<=y2[index[i]];j++)
	{if(l[j]>=0)sign[l[j]]=1;
	l[j]=i;
	}

	for(num=0,j=0;j<n;j++)
	if(sign[j])num++;

	edge[i]=new int[num+1];

	for(num=0,j=0;j<n;j++)
	if(sign[j])edge[i][num++]=j;

	edge[i][num]=-1;

}
}

long answer;

/*
void find()
{long sign[8000],i,sb=1;
int queue[8100],head,tail,now;
answer=0;
memset(sign,0,8000*sizeof(long));

while(1)
{for(i=n-1;i>=0;i--)if(!sign[i])break;
 if(i<0)break;
 
 sign[i]=sb;head=0,tail=0;
 queue[tail++]=i;
while (head!=tail)
{now=queue[head++];
 for(i=0;edge[now][i]!=-1;i++)
 {if(sign[edge[now][i]]==sign[now])answer++;
 else if(sign[edge[now][i]]<sign[now])
		{sign[edge[now][i]]=sign[now]+1;queue[tail++]=edge[now][i];}
 }
}
sb++;
}
return ;
}*/

void find()
{int i,j,k;
char sign[8000];
answer=0;
for(i=n-1;i>=0;i--)
{memset(sign,0,n*sizeof(char));
for(j=0;edge[i][j]!=-1;j++)sign[edge[i][j]]=1;

for(j=0;edge[i][j]!=-1;j++)
for(k=0;edge[edge[i][j]][k]!=-1;k++)
{if(sign[edge[edge[i][j]][k]])answer++;
}

}

}




int main()
{int t;
cin>>t;
while(t--)
{init();
 built();
 find();
 cout<<answer<<endl;
}
return 0;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -