题目搞懂了,就是优化啊,在 test11 TLE两次,看人家的解法,优化的很精巧
#include<stdio.h> #include<stdlib.h> using namespace std; #define MN 300005 int ans[MN],p[MN]; int getl(int x) { int i = x,j; while(x != p[x]){ x = p[x]; } while(i != p[i]){ j = p[i]; p[i] = x; i = j; } return x; } int main(void) { int m,n,l,r,x; scanf("%d %d",&n,&m); for(int i=1;i<=n+1;i++) p[i] = i; for(int i=1;i<=m;i++) { scanf("%d %d %d",&l,&r,&x); int j = getl(l); while(j <= r) { if(j != x ) { ans[j] = x; p[j] = j+1; } j = j + 1; j = getl(j); } } for(int i=1;i<=n;i++) printf("%d ",ans[i]); //system("pause"); return 0; }