首页 > 其他分享 >【题解】洛谷P3674: 小清新人渣的本愿

【题解】洛谷P3674: 小清新人渣的本愿

时间:2024-11-26 15:33:12浏览次数:5  
标签:cnt 洛谷 int 题解 人渣 -- P3674 op

P3674 小清新人渣的本愿

自己想出来了,好耶!!其实和兔子洞那题差不多,标记哪些数区间中出现了,因为 bitset 就相当于状压,也是支持位运算的,所以减法相当于右移 \(x\) 位后与运算,如果有交说明可以得到 \(x\),加法就要额外维护 \(g=f_{N-i}\),查询时直接查找 \(f\) 与 \(g\) 右移 \(N-x\) 位是否有交,乘法更简单直接分解因数就可以,这样的复杂度位 \(O(m(\sqrt{n}+\frac{n}{w}))\)。

\(a+b=x,b=x-a\),所以维护加要进行减操作。

其实不随机的话可以是 \(O(\frac{n^2}{w}\sqrt{n})\),这样是乘法拉满的情况,但是数据范围没这么出就不管了。

#include <bits/stdc++.h>
#define int long long
#define ls p<<1
#define rs p<<1|1 
#define re register 
#define pir pair<int,int>
const int N=1e5+10,M=25005;
const int mod=1e8;
using namespace std;

int n,m;
int a[N];
int of[N],len;
bitset<N> f,g;
int cnt[N];

struct ss{
	int l,r,op,id,x;
}q[N];

void add(int x){
	cnt[a[x]]++;
	if(cnt[a[x]]==1){
		f[a[x]]=1;
		g[N-a[x]]=1;
	}
}

void del(int x){
	if(cnt[a[x]]==1){
		f[a[x]]=0;
		g[N-a[x]]=0;
	}
	cnt[a[x]]--;
}

int ans[N];

bool cmp(ss g,ss h){
	return (of[g.l]^of[h.l])?of[g.l]<of[h.l]:(of[g.l]&1)?of[g.r]<of[h.r]:of[g.r]>of[h.r];
}

signed main(){
//	freopen("xp1.in","r",stdin);
    ios::sync_with_stdio(false);
    cin.tie(nullptr); 
    
    cin>>n>>m;
	
	len=sqrt(n);
	
	for(int i=1;i<=n;i++){
		cin>>a[i];
	} 
    
    for(int i=1;i<=m;i++){
    	int op,l,r,x;
    	cin>>op>>l>>r>>x;
    	q[i].id=i;q[i].l=l;q[i].r=r;q[i].op=op;q[i].x=x;
    	of[i]=(i-1)/len+1;
	}
    
    sort(q+1,q+m+1,cmp); 
    
    int l=1,r=0;
    
    for(int i=1;i<=m;i++){
    	int ql=q[i].l,qr=q[i].r,id=q[i].id,x=q[i].x,op=q[i].op;
		while(l>ql) add(--l); 
    	while(r<qr) add(++r);
    	while(l<ql) del(l++);
    	while(r>qr) del(r--);
    	
    	int flag=0;
    	
    	
    	
    	if(op==1){
    		if((f&(f>>x)).any()){
    			flag=1;
			}
		}
		else if(op==2){
			if((f&(g>>(N-x))).any()){
				flag=1;
			}
		}
		else{
			for(int j=1;j*j<=x;j++){
				if(x%j==0&&f[j]==1){
					if(f[x/j]==1){
						flag=1;
						break;
					}
				}
			}
		}
		
		ans[id]=flag;
	}
	
	for(int i=1;i<=m;i++){
		if(ans[i]){
			cout<<"hana";
		}
		else{
			cout<<"bi";
		}
		cout<<"\n";
	}
	return 0;
}

标签:cnt,洛谷,int,题解,人渣,--,P3674,op
From: https://www.cnblogs.com/sadlin/p/18570293

相关文章

  • 洛谷 P3524 [POI2011] IMP-Party 题解
    题意给定一个\(n\)个点的无向图,其中\(n\)是\(3\)的倍数。保证该图中含有一个\(\frac{2}{3}n\)个点的团。请你找出一个\(\frac{1}{3}n\)个点的团。\(1\leqn\leq3000\)。题解这种题想不出来是不是可以退役了团中任意两点间必有一条边。因此,如果\(u,v\)两点......
  • 做题随笔:洛谷 P11323
    Solution闲话蒟蒻第一次写题解,若有不当还请海涵。题意$n$类牌,每类$v_i$张,每次可出一张(单牌),同类的二张(对子),类A的三张和类B的一张(三带一),同类的四张(炸),求出完牌的最少出牌次数。分析逐类考虑:首先,某类牌多于4张时无脑炸不是最优(本蒟蒻在这里先死了10分钟),只要看一眼样例的例一不......
  • UOJ #919. 【UR #28】环环相扣 题解
    Description给定一个长度为\(n\)的整数序列\(a_1\sima_n\),其中的元素两两互不相等。有\(q\)个询问,每个询问给定一个区间\([l,r]\),你要选择三个下标\(i,j,k\in[l,r]\)满足\(i\neqj,j\neqk,k\neqi\),最大化\((a_i\bmoda_j)+(a_j\bmoda_k)+(a_k\bmoda_i)\)的值。......
  • 【题解】P4688 [Ynoi2016] 掉进兔子洞
    洛谷P4688[Ynoi2016]掉进兔子洞莫队配合bitset例题。lxl官方题解。https://olddrivertree.blog.uoj.ac/blog/4690想到如果只有每个数只出现一次怎么做,可以莫队移动区间用bitset维护每个数的是否出现,再对\(3\)个区间进行与操作就是交集出现的数。但是这只能求出数字......
  • 11.25 NOIP 模拟赛题解
    T1P1069[NOIP2009普及组]细胞分裂原题链接这道题就是基本的数学知识。我们直接来转化题意,这道题就是让我们求min⁡(k......
  • CF1753C题解
    鲜花被卡了一万年。考虑过序列变换的各种情况和逆序对,结果这俩情况状态太多,而且相同逆序对ans也不一定相同。/llsol我们最后想要的状态为所有\(0\)都在\(1\)的左边,令\(cnt_0\)为\(0\)的个数,\(cnt_1\)为\(1\)个数。\(cnt_0+cnt_1=n\),结束的状态前\(cnt_0\)个数......
  • P5572 [CmdOI2019] 简单的数论题 题解
    题目描述\(T\)组数据,给定\(n\gem\),求:\[\sum_{i=1}^n\sum_{j=1}^m\varphi(\frac{\text{lcm}(i,j)}{\gcd(i,j)})\\\]对\(23333\)取模。数据范围\(1\leT\le3\cdot10^4,1\lem\len\le5\cdot10^4\)。时间限制\(\texttt{2s}\),空间限制\(\texttt{128......
  • ARC188B - Symmetric Painting 题解
    很启发的题目,考虑每次绘画的点。Alice绘画\(-x\)点。Bob绘画\(2K-x\)点。按顺序绘画\(0,2K,-2K,4K,-4K,6K,-6K,\ldots\),由于模\(n\)的完全剩余系在互质的乘法中封闭,也就是说\(N\)与\(2K\)互质时可以取遍所有数。再考虑\(\gcd(N,2K)\ne1\)时,......
  • [ABC234G] Divide a Sequence (DP+单调栈)题解
    分析题意十分简单,不难推出式子:$f_i=\sum_{j=1}^{i-1}f_j\times(\max_{k=j+1}^ia_k-\min_{k=j+1}^ia_k)$但我们考虑这个\(O(n^2)\)的东西显然是冲不过去的,所以必须优化转移。式子后面两块都是极值,这启发我们用单调栈解决。由于\(\max_{k=j+1}^i\)与\(\min_{k=......
  • CF2093 B/C题解
    B.ShohagLovesStrings注意到两个相同字母aa的\(f(p)\)为偶数,所以如果找到两个相邻相同字母输出即可。如果没有相邻相同的两个字母,则说明字符串相邻的字母一定不同,再考察三个相邻的字母的情况,发现三个字母均不同,如abc时\(f(p)\)也为偶数,又找到一种合法的情况。那么剩下......