2020 China Collegiate Programming Contest - Mianyang Site J. Joy of Handcraft(线段树模板)

Posted issue是fw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020 China Collegiate Programming Contest - Mianyang Site J. Joy of Handcraft(线段树模板)相关的知识,希望对你有一定的参考价值。

LINK

其实暴力一下就好了

如果 t i t_i ti相同,显然只需要最大的那个 x i x_i xi即可

那么对于每个 t i t_i ti,我们暴力去修改每一段值,区间修改使用线段树即可

最坏情况下, n = 1 0 5 , m = 1 0 5 n=10^5,m=10^5 n=105,m=105

且所有 t i t_i ti互不相同,那么有 m 2 + m 4 + m 6 . . . \\frac{m}{2}+\\frac{m}{4}+\\frac{m}{6}... 2m+4m+6m...个区间

根据调和级数的性质,区间个数一定小于 m l o g ( m ) mlog(m) mlog(m)

线段树单词修改的复杂度也是 l o g log log

总体复杂度是 m l o g 2 ( m ) mlog^2 (m) mlog2(m),实际远远跑不满,因为大部分区间小于 m m m

#include <bits/stdc++.h>
using namespace std;
const int maxn = 4e6+10;
#define mid (l+r>>1)
#define ls (rt<<1)
#define rs (rt<<1|1)
#define lson ls,l,mid
#define rson rs,mid+1,r
int t[maxn],x[maxn],ans[maxn],mx[maxn],n,m;
int laz[maxn];
void pushdown(int rt,int l,int r)
{
	if( !laz[rt] )	return;
	laz[ls] = max( laz[ls],laz[rt] ), laz[rs] = max( laz[rs],laz[rt] );
	laz[rt] = 0;
}
void insert(int rt,int l,int r,int L,int R,int val)
{
	if( l>R || r<L )	return;
	if( l>=L && r<=R ){ laz[rt] = max(laz[rt],val ); return; }
	insert( lson,L,R,val ); insert( rson,L,R,val );
}
void get(int rt,int l,int r)
{
	if( l==r ){ ans[l] = laz[rt]; return; }
	pushdown(rt,l,r);
	get( lson ); get( rson );
}
int main()
{
	int T,casenum = 0; cin >> T;
	while( T-- )
	{
		cin >> n >> m;
		for(int i=1;i<=n;i++)
		{
			scanf("%d%d",&t[i],&x[i]);
			t[i] = min( t[i],m );
			mx[t[i]] = max( mx[t[i]],x[i] ); 
		}
		for(int i=1;i<=m;i++)
		{
			for(int l=1,r=i; ;l+=2*i,r+=2*i)
			{
				if( l>m )	break;
				if( r>m )	r = m;
				insert(1,1,m,l,r,mx[i] );
				if( r==m )	break;
			}	
		}
		get(1,1,m);
		printf("Case #%d: ",++casenum);
		for(int i=1;i<=m;i++)	printf("%d%c",ans[i],i==m?'\\n':' ');
		for(int i=1;i<=n;i++)	mx[t[i]] = 0;
		for(int i=1;i<=4*m;i++)	laz[i] = ans[i] = 0;
	}
}

以上是关于2020 China Collegiate Programming Contest - Mianyang Site J. Joy of Handcraft(线段树模板)的主要内容,如果未能解决你的问题,请参考以下文章

2020 China Collegiate Programming Contest, Weihai Site L. Clock Master(分组背包)

2020 China Collegiate Qinhuangdao Site F. Friendly Group(思维+边双连通)

2020 China Collegiate Programming Contest - Mianyang Site J. Joy of Handcraft(线段树模板)

2020 China Collegiate Programming Contest, Weihai Site C. Rencontre(lca+树形dp)

The 2019 China Collegiate Programming Contest Harbin Site

The 2019 China Collegiate Programming Contest Harbin Site F. Fixing Banners