http://acm.fafu.edu.cn/problem.php?id=1008
#include "stdio.h"
#include "string.h"
const int maxn = 100005;
int n,q;
int x,y,len;
int tree[maxn<<2];
void buildtree( int ld,int rd,int t )
{
tree[t] = 10;
if( ld == rd )
return;
int mid = ( ld + rd )>>1;
buildtree( ld,mid,t<<1 );
buildtree( mid+1,rd,t<<1|1 );
}
void updata( int ld,int rd,int t )
{
if( ld >= x && rd <= y )
{
tree[t] = len;
return;
}
if( tree[t] != -1 ) //Pushdown
{
tree[t<<1] = tree[t<<1|1] = tree[t];
tree[t] = -1;
}
int mid = ( ld + rd )>>1;
if( x <= mid )
updata( ld,mid,t<<1 );
if( y > mid )
updata( mid + 1,rd,t<<1|1 );
}
int query( int ld,int rd,int t )
{
if( tree[t] != -1 )
{
return tree[t] * ( rd - ld + 1 );
}
int mid = ( ld + rd )>>1;
return query( ld,mid,t<<1 ) + query( mid+1,rd,t<<1|1 );
}
int main()
{
//freopen("data.txt","r",stdin);
int t,cas = 1;
scanf("%d",&t);
while( t-- )
{
scanf("%d%d",&n,&q);
buildtree( 1,n,1 );
for( int i = 0; i < q; i ++ )
{
scanf("%d%d%d",&x,&y,&len);
if( x > y )
{
x=x+y;y=x-y;x=x-y;
}
updata( 1,n,1 );
}
printf("Case %d: The total value of the stick is %d.\n",cas++,query( 1,n,1 ));
}
return 0;
}