20pts玄学代码球调
查看原帖
20pts玄学代码球调
253765
houpingze楼主2021/5/24 22:51

rt,已经傻了kelkk

// Problem: P3674 小清新人渣的本愿
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3674
// Memory Limit: 125 MB
// Time Limit: 3000 ms
// 
// Powered by CP Editor (https://cpeditor.org)
 

#include<bits/stdc++.h>
#define reg register int
#define INF (1<<30) 
// #define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++) 
#define y(x) (id[x])
#define f(x) (x/S+1)
#define int long long
// #pragma GCC optimize("Ofast")
using namespace std;

const int inf=1e9;
char buf[1<<23],*p1=buf,*p2=buf,obuf[1<<23],*O=obuf;
int read(){
    int res=0,fs=1; char c=getchar();
    while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
    while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
    return res*fs;
}
void print(int x){
    if(x<0) { putchar('-'); x=-x;}
    if(x>9) print(x/10);
    putchar(x%10+'0');
}
int n,cnt,m,a[100005],ans,k,tmp,aw[1014141],id[1014141];
struct Q{
    int l,r,x,idx,opt;
}q[100005];
struct D{
	int l,r,x,idx;
}divv[100005];
char f[100005];  
int S;
bool cmp(Q x,Q y){ 
    return ((y(x.l)^y(y.l))?x.l<y.l:((y(x.l)&1)?x.r<y.r:x.r>y.r));
} 
int t[100005];
int idx[100005];
bitset<100005>b,by;
const int N=100000;
void add(int x){
	t[a[x]]++;
	b[a[x]]=by[N-a[x]]=1; 
}
void del(int x){
	t[a[x]]--;
	if(t[a[x]]==0) b[a[x]]=by[N-a[x]]=0;
}
bool solve(int x){
	if(x==0) return 0;
	for(int i=1;i<=sqrt(x)+5;i++){
		if(x/i<=100000&&t[i]&&t[x/i]&&x%i==0) return 1; 
	}
	return 0;
}//*
signed main() {  
    n=read();
    m=read(); 
    S=sqrt(n);
    for(reg i=1;i<=n;i++) id[i]=f(i);//编号
    for(reg i=1;i<=n;i++) a[i]=read(); 
	int cnt=0,c=0;
    for(reg i=1;i<=m;i++) {
        int t1,t2,opt,l,r,x;
        opt=read(),l=read(),r=read(),x=read(); 
        	// cnt++;
        	q[i]={l,r,x,i,opt};  
    }
    sort(q+1,q+m+1,cmp);
    reg l=1,r=0;
    for(reg i=1;i<=m;i++){
        int st=q[i].l,ed=q[i].r;  
        while(l<st) { 
        	del(l);
            ++l;
        }
        while(l>st) { 
       		l--;
       		add(l); 
        }
        while(r<ed) {
        	r++; 
			add(r); 
		}
        while(r>ed) { 
            del(r);
            --r; 
        } 
        if(q[i].opt==1){//+
        	aw[q[i].idx]=(b&(b<<q[i].x)).any();
        }else if(q[i].opt==2){//-
        	aw[q[i].idx]=((by>>(N-q[i].x))&b).any();
        }else if(q[i].opt==3){//*
        	aw[q[i].idx]=solve(q[i].x);
        }
    } 
    for(reg i=1;i<=m;++i){
		cout<<(aw[i]?"hana":"bi") <<'\n';
    }
    return 0;
}
2021/5/24 22:51
加载中...