对于每一个格子,看是行最后画还是列最后画。预处理一下就可以了。
#include<stdio.h> #include<string.h> int n,m,k; int op[100000+10]; int id[100000+10]; int info[100000+10]; int high[200000+10]; int main() { scanf("%d%d%d",&n,&m,&k); memset(high,-1,sizeof high); for(int i=1;i<=k;i++) scanf("%d%d%d",&op[i],&id[i],&info[i]); for(int i=k;i>=1;i--) { int y; if(op[i]==1) y=id[i]; else y=id[i]+n; if(high[y]==-1) high[y]=i; } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(high[i]==-1&&high[j+n]==-1) printf("0 "); else if(high[i]==-1&&high[j+n]!=-1) printf("%d ",info[high[j+n]]); else if(high[i]!=-1&&high[j+n]==-1) printf("%d ",info[high[i]]); else { if(high[i]>high[j+n]) printf("%d ",info[high[i]]); else printf("%d ",info[high[j+n]]); } } printf(" "); } return 0; }