首页 > 其他分享 >「杂题乱刷」P1558

「杂题乱刷」P1558

时间:2024-01-23 22:23:13浏览次数:38  
标签:forl -- P1558 90 100 杂题 define

好久没写 cnblog 了,来写一下。

做一下恢复训练。

P1558 (色板游戏)

数据结构板子题?反正我一开始是不知道怎么去维护的。

反正我代码分块写的跟线段树一样

思路大致是把图的颜色化成二进制,然后就很好做了,注意更新时记得顺便维护答案。

给大家几个样例来调代码:

hack1in:

100 30 2
C 1 86 1
P 87 86

hack1out:

1

hack2in:

100 30 6
C 1 100 2
C 1 95 1
C 1 90 3
P 95 90
P 96 91
P 96 90

hack2out:

2
2
3

参考代码:

点击查看代码
/*
Tips:
你数组开小了吗?
你MLE了吗?
你觉得是贪心,是不是该想想dp?
一个小时没调出来,是不是该考虑换题?
*/
#include<bits/stdc++.h>
using namespace std;
#define map unordered_map
#define forl(i,a,b) for(register long long i=a;i<=b;i++)
#define forr(i,a,b) for(register long long i=a;i>=b;i--)
#define lc(x) x<<1
#define rc(x) x<<1|1
#define cin(x) scanf("%lld",&x)
#define cout(x) printf("%lld",x)
#define lowbit(x) x&-x
#define pb push_back
#define pf push_front
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl '\n'
#define QwQ return 0;
#define ll long long
/*
Hack:
100 3 2
C 1 86 1
P 86 87
output:
1
*/
ll n,m,q,L,R,c,all[100010],a[100010],b[100010],ans[100010],l[100010],r[100010],sq;
char opt;
ll f(ll x){
	ll sum=0;
	for(;x;x-=lowbit(x))
		sum++;
	return sum;
}
void upd(ll x)
{
	ll sum=0;
	forl(i,l[x],r[x])
		sum|=a[i];
	ans[x]=sum;
}
void upd2(ll x)//第x个区间下传标记
{
	if(all[x]==0)
		return ;
	forl(i,l[x],r[x])
		a[i]=all[x];
	ans[x]=all[x],all[x]=0;
}
void add(ll L,ll R,ll c)
{
	if(b[L]==b[R])
	{
		upd2(b[L]);
		forl(i,L,R)
			a[i]=(1ll<<c);
		upd(b[L]);
		return ;
	}
	upd2(b[L]);
	forl(i,L,r[b[L]])
		a[i]=(1ll<<c);
	upd(b[L]);
	upd2(b[R]);
	forl(i,l[b[R]],R)
		a[i]=(1ll<<c);
	upd(b[R]);
	forl(i,b[L]+1,b[R]-1)
		all[i]=(1ll<<c),ans[i]=(1<<c);
}
void query(ll L,ll R)
{
	ll sum=0;
	if(b[L]==b[R])
	{
		upd2(b[L]);
		forl(i,L,R)
			sum|=a[i];
		cout<<f(sum)<<endl;
		return ;
	}
	upd2(b[L]);
	forl(i,L,r[b[L]])
		sum|=a[i];
	upd2(b[R]);
	forl(i,l[b[R]],R)
		sum|=a[i];
	forl(i,b[L]+1,b[R]-1)
		sum|=ans[i];
	cout<<f(sum)<<endl;
}
int main()
{
	IOS;
	cin>>n>>m>>q;
	sq=pow(sqrt(n),0.66);
	forl(i,1,n)
	{
		l[i]=r[i-1]+1;
		r[i]=min(sq*i,n);
		forl(j,l[i],r[i])
			b[j]=i,a[j]=(1ll<<1);
		all[i]=(1ll<<1),ans[i]=(1ll<<1);
	}
	while(q--)
	{
		cin>>opt>>L>>R;
		if(L>R)
			swap(L,R);
		if(opt=='C')
			cin>>c,add(L,R,c);
		else
			query(L,R);
	}
    /******************/
	/*while(L<q[i].l) */
	/*    del(a[L++]);*/
	/*while(L>q[i].l) */
	/*    add(a[--L]);*/
	/*while(R<q[i].r) */
	/*	  add(a[++R]);*/
	/*while(R>q[i].r) */
	/*    del(a[R--]);*/
    /******************/
	QwQ;
}

标签:forl,--,P1558,90,100,杂题,define
From: https://www.cnblogs.com/wangmarui/p/17983567

相关文章

  • 哈希学习笔记+杂题(进阶1 字符串哈希)
    哈希杂题前言:竟然下雪了,但是天是灰蒙蒙的。一、哈希学习笔记+杂题(进阶1字符串哈希)相关题单:戳我字符串哈希因为是一种玄学做法,所以具有极强的延展性。所以再碰到字符串的题时,抛开马拉车,kmp,字典树,AC自动机,SA&SAM,先想一下哈希的做法,如果时间复杂度允许,那就可以直接上哈希(虽然你......
  • 哈希学习笔记+杂题(进阶1 字符串哈希)
    哈希杂题前言:竟然下雪了,但是天是灰蒙蒙的。一、哈希学习笔记+杂题(进阶1字符串哈希)相关题单:戳我字符串哈希因为是一种玄学做法,所以具有极强的延展性。所以再碰到字符串的题时,抛开马拉车,kmp,字典树,AC自动机,SA&SAM,先想一下哈希的做法,如果时间复杂度允许,那就可以直接上哈希(虽然你......
  • 哈希学习笔记+杂题(基础2 字符串哈希)
    哈希杂题前言:骗分神器,我之前竟然没有学。一、哈希学习笔记+杂题(基础2字符串哈希)相关题单:戳我1.哈希(hash)简介哈希算法(HashAlgorithm),又称散列算法。有两种用法,第一种就是将一字符串转化成任意进制的数,目的是方便存储。第二种就是将大范围的数映射成小范围的数,目的也是方便存......
  • 寒假集训杂题选记 2
    目录写在前面CF1288EP3538[POI2012]OKR-AHorriblePoem写在最后写在前面寒假集训期间杂题选记。CF1288E知识点:数据结构,乱搞小清新数据结构。显然\(i\)最靠上的出现位置不是1就是\(i\);\(i\)最靠下的位置一定出现在\(i\)即将被扔到顶上前或者所有操作结束之后,且此......
  • 「杂题乱刷」AT_abc337_e
    题目链接题目传送门(at)题目传送门(luogu)题意简述有\(n\)瓶果汁,其中有一瓶坏的,你需要使用最少的小白鼠使得这些小白鼠能找出已经变质的果汁的编号,对于每只小白鼠,你可以给他们喝任意瓶不重复的果汁,每瓶果汁可以被平均分。解题思路妙妙构造题。思路一:拿\(n\)个小白鼠,每个小......
  • Petrozavodsk Summer 2019. Day 9. MEX Foundation Contest【杂题】
    比赛链接A.TheOnePolynomialMan给定模数\(p\)和\(0\simp-1\)的两个集合\(U,V\),求有多少个有序对\((a,b)\)满足:\(f(a,b)=\prod\limits_{z\inV}\left(\frac{(2a+3b)^2+5a^2}{(3a+b)^2}+\frac{(2a+5b)^2+3b^2}{(3a+2b)^2}-z\right)\equiv0\pmo......
  • 【杂题乱写】2024.01 #2
    AtCoder-JOIOPEN2022_Aシーソー开局考虑二分,然后不会做,没想到不需要二分。以初始的重心为基准,记为\(mid\),可以对操作\(i\)次得到的所有可能区间求出重心在\(mid\)左侧且最靠右的以及在\(mid\)右侧且最靠左的两个区间,容易发现这两个区间左右端点都差\(1\),记靠左的一个......
  • 搜索学习笔记+杂题 (进阶二 dfs/bfs的进阶)
    前言:由于搜索的题还是做的太少了,所以以后有可能会不定期更新。四、还是进阶的dfs/bfs相关题单:戳我1、dfs(1)meetinthemiddleP2962[USACO09NOV]LightsG颠覆了我对折半搜索的认知,果然,只要满足了折半搜索的几个性质,基本上都可以使用折半搜索来处理。首先我们拿到的是一张......
  • 搜索学习笔记+杂题 (进阶一 dfs/bfs的进阶)
    前言:没啥好说的了。所以只能来写博客了。搜索杂题:相关题单:戳我二、进阶dfs/bfs1、dfs进阶——折半搜索(meetinthemiddle)由于深搜的时间复杂度在每种状态有两个分支的情况下是\(O(2^n)\)。所以一般暴力深搜的数据范围就在\(20-25\)之间。而对于有一大类的题,它的搜索思......
  • P1558 色板游戏
    原题链接题解1,种30棵树,每棵树代表每种颜色,树的每个节点代表这个颜色在对应区间上是否存在code#include<bits/stdc++.h>usingnamespacestd;intst[32][400005]={0};intlazy[32][400005]={0};voidpushdown(intwho,intnode){st[who][node*2]=lazy[who][node];......