//9972K 1250MS
//C++
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
const int MAX=500001;
typedef struct _node{
int qi,si,vi;
}Node;
Node In[MAX];
int Qi[MAX];
int Qii[MAX];
int Si[MAX];
int Sii[MAX];
int N;
int SN,QN;
int cmp(const void* a,const void* b)
{
Node* ap=(Node*)a;
Node* bp=(Node*)b;
if(ap->si!=bp->si)
return ap->si-bp->si;
return ap->qi-bp->qi;
}
int cmpsi(const void* a,const void* b)
{
return *(int*)a-*(int*)b;
}
int main()
{
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%d%d%d",&In[i].qi,&In[i].si,&In[i].vi);
Qi[i]=In[i].qi;
Si[i]=In[i].si;
}
qsort(In,N,sizeof(In[0]),cmp);
qsort(Qi,N,sizeof(Qi[0]),cmpsi);
qsort(Si,N,sizeof(Si[0]),cmpsi);
Sii[0]=Si[0];
Qii[0]=Qi[0];
SN=QN=0;
for(int i=1;i<N;i++)
{
if(Qi[i]!=Qii[QN])
Qii[++QN]=Qi[i];
if(Si[i]!=Sii[SN])
Sii[++SN]=Si[i];
}
SN++;
QN++;
printf("-1 ");
for(int i=0;i<QN;i++)
printf("%d ",Qii[i]);
printf("\n");
int item=0;
for(int i=0;i<SN;i++){
printf("%d ",Sii[i]);
for(int j=0;j<QN;j++){
if(In[item].qi!=Qii[j]||In[item].si!=Sii[i])
printf("0 ");
else{
int sum=0;
while(In[item].qi==Qii[j]&&In[item].si==Sii[i]&&item<N)
{
sum+=In[item].vi;
item++;
}
printf("%d ",sum);
}
}
printf("\n");
}
return 0;
}
|