void upd(int node,int l,int r,int val)
{
	tree[node] = (r - l + 1) * val;
	lazy[node] = val;
}

void propagate(int node,int l,int r)
{
	if (lazy[node] == -1) return;
	int mid = (l + r) >> 1;
	upd(node * 2,l,mid,lazy[node]);
	upd(node * 2 + 1,mid + 1,r,lazy[node]);
	lazy[node] = -1;
}

void rangeUpdate(int node,int nodeL,int nodeR,int queryL,int queryR,int val)
{
	if (queryL > nodeR) return;
	if (queryL <= nodeL && nodeR <= queryR)
	{
		upd(node,l,r,val);
		return;
	}
	propagate(node,nodeL,nodeR);
	int mid = (nodeL + nodeR) >> 1;
	rangeUpdate(node * 2,nodeL,mid,queryL,queryR,val);
	rangeUpdate(node * 2 + 1,mid + 1,nodeR,queryL,queryR,val);
	tree[node] = tree[node * 2] + tree[node * 2 + 1];
}

int rangeQuery(int node,int nodeL,int nodeR,int queryL,int queryR,int val)
{
	if (queryL > nodeR) return;
	if (queryL <= nodeL && nodeR <= queryR) return tree[node];
	propagate(node,nodeL,nodeR);
	int mid = (nodeL + nodeR) >> 1;
	return rangeQuery(node * 2,nodeL,mid,queryL,queryR) + rangeQuery(node * 2 + 1,mid + 1,nodeR,queryL,queryR);
}