| 
		
			| 
	
	
		
			线段树+状态压缩
  #include <stdio.h> 
  
  const int LEN = 100005; 
  
  struct NODE 
    { 
  int b, e; 
  int ls, rs; 
  int color; 
  int fugai; 
  }tree[LEN*2]; 
  int nt; 
  
  void creat ( int b, int e ) 
    { 
  
  tree[nt].b = b; 
  tree[nt].e = e; 
  tree[nt].ls = tree[nt].rs = -1; 
  tree[nt].color = 0; 
  tree[nt].fugai = 0; 
  int p = nt++; 
  
  if ( b!=e ) 
     { 
  tree[p].ls = nt; 
  creat ( b, (b+e)/2 ); 
  tree[p].rs = nt; 
  creat ( (b+e)/2+1, e ); 
  } 
  } 
  
  void chang ( int b, int e, int c, int p ) 
    { 
  
  if ( b==tree[p].b&&e==tree[p].e ) 
     { 
  tree[p].fugai = c; 
  tree[p].color = 1<<c; 
  return; 
  } 
  
  int ls = tree[p].ls; 
  int rs = tree[p].rs; 
  if ( tree[p].fugai!=-1 ) 
     { 
  tree[ls].fugai = tree[p].fugai; 
  tree[ls].color = 1<<tree[p].fugai; 
  tree[rs].fugai = tree[p].fugai; 
  tree[rs].color = 1<<tree[p].fugai; 
  tree[p].fugai = -1; 
  } 
  
  int mid = (tree[p].b+tree[p].e)/2; 
  if ( e<=mid ) 
  chang ( b, e, c, ls ); 
  else if ( b>mid ) 
  chang ( b, e, c, rs ); 
  else 
     { 
  chang ( b, mid, c, ls ); 
  chang ( mid+1, e, c, rs ); 
  } 
  tree[p].color = tree[ls].color|tree[rs].color; 
  } 
  
  int ser ( int b, int e, int p ) 
    { 
  
  if ( b==tree[p].b&&e==tree[p].e ) 
     { 
  return tree[p].color; 
  } 
  
  int color = 0; 
  int ls = tree[p].ls; 
  int rs = tree[p].rs; 
  if ( tree[p].fugai!=-1 ) 
     { 
  tree[ls].fugai = tree[p].fugai; 
  tree[ls].color = 1<<tree[p].fugai; 
  tree[rs].fugai = tree[p].fugai; 
  tree[rs].color = 1<<tree[p].fugai; 
  tree[p].fugai = -1; 
  } 
  
  int mid = (tree[p].b+tree[p].e)/2; 
  if ( e<=mid ) 
  color |= ser ( b, e, ls ); 
  else if ( b>mid ) 
  color |= ser ( b, e, rs ); 
  else 
     { 
  color |= ser ( b, mid, ls ); 
  color |= ser ( mid+1, e, rs ); 
  } 
  return color; 
  } 
  
  int main () 
    { 
  
  int l, t, o; 
  scanf ( "%d%d%d", &l, &t, &o ); 
  nt = 0; 
  creat ( 0, l-1 ); 
  for ( int i=0; i<o; i++ ) 
     { 
  char str[5]; 
  int b, e, c; 
  scanf ( "%s", str ); 
  if ( str[0]=='C' ) 
     { 
  scanf ( "%d%d%d", &b, &e, &c ); 
  if ( b>e ) 
     { 
  int tmp = b; 
  b = e; 
  e = tmp; 
  } 
  if ( e<=0||b>l ) 
  continue; 
  if ( b<=0 ) 
  b = 1; 
  if ( e>l ) 
  e = l; 
  chang ( b-1, e-1, c-1, 0 ); 
  } 
  else if ( str[0]=='P' ) 
     { 
  scanf ( "%d%d", &b, &e ); 
  if ( b>e ) 
     { 
  int tmp = b; 
  b = e; 
  e = tmp; 
  } 
  if ( e<=0||b>l ) 
     { 
  printf ( "0\n" ); 
  continue; 
  } 
  if ( b<=0 ) 
  b = 1; 
  if ( e>l ) 
  e = l; 
  int color = ser ( b-1, e-1, 0 ); 
  int ans = 0; 
  while ( color ) 
     { 
  if ( color&1 ) 
  ans ++; 
  color >>= 1; 
  } 
  printf ( "%d\n", ans ); 
  } 
  } 
  return 0; 
  } 
      
	    
    
 |  | 
		
			| 
			
				| 
	|  |  | 日 | 一 | 二 | 三 | 四 | 五 | 六 | 
|---|
 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |  | 1 | 2 | 3 | 4 | 5 | 6 | 7 |  | 8 | 9 | 10 | 11 | 12 | 13 | 14 |  | 15 | 16 | 17 | 18 | 19 | 20 | 21 |  | 22 | 23 | 24 | 25 | 26 | 27 | 28 |  | 29 | 30 | 1 | 2 | 3 | 4 | 5 |  |  公告决定从线程开始!! 常用链接留言簿(6)随笔档案搜索最新评论
	阅读排行榜评论排行榜
 |  |