#include<memory.h> #include<stdio.h> #include<iostream> using namespace std; #define NoCol 8009 #define MulCol -2 #define M 8010 struct TNode { int left,right; int col; }; TNode t[10*M]; void Construct(int pos,int l,int r) { t[pos].left = l; t[pos].right = r; t[pos].col = NoCol; if(l == r) return; Construct(pos*2,l,(l+r)/2); Construct(pos*2+1,(l+r)/2+1,r); return ; } void Paint(int pos,int l,int r,int c) { if(t[pos].col == c) return; if(t[pos].left==l && t[pos].right==r){ t[pos].col = c; return; } //这里要注意一下 if(t[pos].col != MulCol){ t[(pos*2)].col = t[pos].col; t[(pos*2+1)].col = t[pos].col; t[pos].col = MulCol; } int mid = (t[pos].left+t[pos].right)/2; if(l > mid) { Paint(pos*2+1,l,r,c); return; } if(r <= mid) { Paint(pos*2,l,r,c); return; } Paint(pos*2,l,mid,c); Paint(pos*2+1,mid+1,r,c); } int color[M+10]; void Calculate(int pos) { if(t[pos].col != MulCol){ int c = t[pos].col; for(int i = t[pos].left; i <= t[pos].right; i++) color[i] = c; return; } Calculate(pos*2); Calculate(pos*2+1); return; } int main() { int n,x1,x2,c; int count[M]; while(cin >> n) { memset(count,0,sizeof(count)); Construct(1,0,M); for(int i = 0; i < n; i++){ scanf("%d%d%d",&x1,&x2,&c); if(x1==x2) continue; Paint(1,x1,x2-1,c); } int last = NoCol; Calculate(1); for(int i = 0; i < 8001; i++) if(last != color[i]) { last = color[i]; count[color[i]]++; } for(int i = 0; i < 8001; i++) if(count[i]) printf("%d %d/n",i,count[i]); printf("/n"); } return 0; }