LuoguP3674 小清新人渣的本愿

题目地址

题目链接

题解

这种lxl的题还是没修改操作的题基本就是莫队

分开考虑每个询问

1.减法

\(a-b=x?a=b+x\)

用一个\(bitset\),第\(i\)位表示有没有\(i\)这个数

那么查询其实就等价于查询bit&(bit>>x)之后里面有没有1

\(a+b=x\)

2.加法

\(a+b=x\)

设\(p=n-b\)

\(a-p=a-n+b=x-n\)

维护一下另外一个\(bitset\),里面存的是\(n-i\)有没有出现过

查询直接查bit1&(bit2>>(n-x))里面有没有1就好

3.乘法

乘法不好维护

但是直接枚举因数也是可以的,在第一个bitset里面看成对的因数有没有出现过就好

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <bitset>
using namespace std;

inline int read() {
    int x = 0, f = 1; char c = getchar();
    while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
    while(c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = getchar();}
    return x * f;
}

#define N 100010

bitset<N>s1;
bitset<N>s2;
int cnt[N];
int n, m, a[N];
int ans[N], block;
struct ques {
    int opt, l, r, x, id;
} q[N];

bool cmp(ques a, ques b) {
    if(a.l / block == b.l / block) return a.r < b.r;
    else return a.l < b.l;
}

void add(int x) {
    x = a[x];
    cnt[x]++;
    if(cnt[x] == 1) s1[x] = s2[n - x] = true;
}

void dele(int x) {
    x = a[x];
    cnt[x]--;
    if(!cnt[x]) s1[x] = s2[n - x] = false;
}

int main() {
    n = read(); m = read();
    for(int i = 1; i <= n; i ++) a[i] = read();
    block = n / sqrt(m);
    for(int i = 1; i <= m; i ++) {
        q[i] = (ques) {read(), read(), read(), read(), i};
    }
    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, opt = q[i].opt, x = q[i].x;
        while(l < ql) dele(l++);
        while(l > ql) add(--l);
        while(r < qr) add(++r);
        while(r > qr) dele(r--);
        if(opt == 1) {
            ans[q[i].id] = (s1 & (s1 >> x)).any();
        }
        if(opt == 2) {
            ans[q[i].id] = (s1 & (s2 >> (n - x))).any();
        }
        if(opt == 3) {
            for(int k = 1; k * k <= x; k ++) {
                if(x % k == 0) {
                    if(s1[k] && s1[x / k]) {
                        ans[q[i].id] = 1;
                        break;
                    }
                }
            }
        }
    }
    for(int i = 1; i <= m; i ++) {
        puts(ans[i] ? "hana" : "bi");
    }
    return 0;
}

原文地址:https://www.cnblogs.com/henry-1202/p/10201959.html

时间: 2024-10-11 23:23:45

LuoguP3674 小清新人渣的本愿的相关文章

洛谷 P3674 小清新人渣的本愿 [莫队 bitset]

传送门 题意: 给你一个序列a,长度为n,有Q次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ,这三个操作分别为操作1,2,3 题面太强啦!!! 感觉就是莫队,想了一下分块不好搞更坚定了莫队的信念 $a-b=x$,$a=x+b$,放在权值数组上就是b右移x位,$bitset$大法好 加法同理 乘法,总共就$\sqrt{N}$个约数.... #include <iostream> #incl

luogu3674 小清新人渣的本愿 (bitset+莫队)

对于加减,用bitset维护当前每个数有没有 对于乘,暴力枚举约数 然后莫队 复杂度$O(m(\sqrt{n}+\frac{c}{64}))$ 1 #include<bits/stdc++.h> 2 #define pa pair<ll,ll> 3 #define CLR(a,x) memset(a,x,sizeof(a)) 4 #define MP make_pair 5 using namespace std; 6 typedef long long ll; 7 const i

【题解】Luogu P3674 小清新人渣的本愿

原题传送门 这题还算简单(我记得我刚学oi时就来写这题,然后暴力都爆零了) 看见无修改,那么这题应该是莫队 维护两个bitset,第二个是第一个的反串,bitset内维护每个数字是否出现过 第一种操作: 要求y-z=x,所以y=z+x 最后判断有没有k和k-x都出现在bitset中的情况 第二种操作: 和第一种类似的方法,就不再讲了qwqwq 第三种操作: 暴力把x分解成两个数的乘积,判断这两个数是否出现过 因为莫队是\(O(n \sqrt n)\)的·,所以这里也不需要更快 #include

LBS(位置定位服务)发布小清新版本

web前端对我来说始终是一个短板,当然在不追求全栈的情况下,我也觉得没必要多精通,至少对于平常调整已经比较熟悉了.但是这次因为将lbs的页面外包给别人,而因为各种各样的原因导致交付时间一拖再拖,让人非常失望,大感掌握前端的必要性.总算在前几天交付了,使用的是bootstrap,虽然这个前端框架之前就又耳闻,但是因为公司一直使用ext,也没有涉略.这次没办法,已经答应了合作伙伴在4月份之前搞出来,所以上一周边学bootstrap边做,现在发现bootstrap就是我之前一直想找的框架.为什么这么说

私房库视频学习笔记-小清新BBS系统开发技术归纳

自己一直在学习PHP开发,前一段时间在51cto上看到私房库孙胜利老师的视频,下载了他的小清新BBS系统开发视频学习.现在把里面的好的运用收集到这儿. 在看了这套视频后先了解整个web项目开发的过程. 公共配置参数: <?php date_default_timezone_set('Asia/Shanghai');//设置时区session_start();header('Content-type:text/html;charset=utf-8');if(version_compare(PHP_

小清新文字:优雅女孩,耐的住寂寞,拥得了繁华

最好的样子就是平静一点,哪怕一个人生活,穿越一个又一个城市,走过一个又一条街道,仰望一片又一片天空,见证一次又一次别离.即便世界与我为敌,只要心还透明,就能折射希望.       女孩儿:我告诉自己现实容不得你拖延,拖延只会让我变得更焦虑而已,所以刚开始的时候我规定自己每天提早上床半小时,看上几十页书,很快就变成习惯了.有的时候我不得不感叹如果真的去做一件事情的话,那么这件事情没有那么难.当你真的想要做一件事情的时候,整个世界都会来协助你,就是这种感觉.      女孩儿:只要出发,就能到达,你

谁说知乎没有小清新?

一 窗外的炮竹声还没有平息,胡宇一个人躺在床上,不知是该享受元宵节的欢庆,还是该哀叹一个人的孤寂. 他想强迫自己睡着,可偏偏窗外绚丽的烟花令他想起了一些难以忘怀的往事——关于许妍,关于10年前的那次相遇. 二 胡宇十年前还是飞行员专业大二的学生,那时候知乎刚刚兴起,胡宇就是第一批用户之一.每当夕阳西下的时候,结束一天的课程和训练的胡宇,回到宿舍,换下穿了一天的制服,带上电脑就直奔有 wifi 的4号教学楼. 胡宇虽然不是学霸,但喜欢安静,要不是白天有课程,能在自习室上一整天网. 那年寒假刚刚结束

小清新的jQuery ck-slide 图片轮播

ck_slide 是一款小清新的jQuery 幻灯片插件,它非常小巧,压缩后仅 3KB,基本功能可以满足.它支持淡入淡出/左右滚动.箭头/圆点控制.自动播放. 在线实例 默认(淡入淡出) 左右滚动 自动播放 使用方法 <div class="ck-slide">      <ul class="ck-slide-wrapper">          <li>              <a href="#"

三石推荐!把 Bootstrap 小清新带回家!

无敌传送门:http://fineui.com/demo_pro/default.aspx?theme=bootstrap1&menu=accordion 喜欢就来赞一个! 把麻烦留给三石,把时间留给自己!把 Bootstrap 小清新带回家! 注:Bootstrap Pure(小清新)主题下个版本支持(v2.7.0).