身为10班人,就凭标题,这道题是一定要做的。

但是做了才发现有毒。。。。所以是信念和题解和大腿支撑了我!

先“假设”自己实力过硬,推出了结论:当区间过大时,必定存在一种方案可以输出”Yuno“。剩下就是这区区几个数的乱搞了。

数据结构学傻先不动声色地敲了一个线段树维护所有的立方操作,并且我发现自从noip2015挂过lazy tag以后就再也不会写错了。。。。这就是传说中教训的力量

然后我还是请教了一些更优秀的维护方法,不过万变不离其宗,这个常数说不要就不要了吧。。。。

接下来,我开始想当然:差不多了。。。再敲个快速幂。。。随便搞下。。。差不多了。。。

后来幸好看了下V,不是质数,那又要求phi啊?!

而且不一定互质,不仅要求phi而且要提取质因数啊?!

不想写啊,只能向倍增势力低头。

再后来,思考“区区几个数的乱搞”,好像并不容易。看了题解说得很含蓄,发现是个乱搞的思想。

对于区间【L,R】,以mid为界,左边枚举两个不相交子集,右边枚举两个不相交子集,判断它们的合法性。

于是就T了,原来我的复杂度和常数达到了十分可怕的境地。这就很不爽了。因为我不会卡常。

再回过头来看那个“假设”,有实力的人证一证,没实力的人写个暴力找下规律,发现可以把题解中的下界13改为10,这样就卡过去了。

(当然,你写9也能A)。。。。数据太随机了。

事情还没结束,time排名垫底了,原来是我乱搞写错了。四重循环,不挂才怪。正确做法还得写一个桶,把左边所有值扔进桶里,这样询问就飞起来了。

最后shy说:你这样也能过,说明常数实在太小了。

2333

改了一下。。。仍旧快垫底?

#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 200020
#define ll long long
],tree[N*];ll fa[N][];
],V[];
ll a[N],b[N];
void push_down(int p,int st,int ed){
    ){
        f[p+p]+=f[p];f[p+p+]+=f[p];;
        tree[p+p]+=f[p]*(mid-st+);tree[p+p+]+=f[p]*(ed-mid);
        f[p]=;
    }
}
void update(int L,int R,int st,int ed,int p){
    ;;
    )push_down(p,st,ed);
    if(R<=mid)update(L,R,st,mid,p+p);else
     ,ed,p+p+);else
      update(L,mid,st,mid,p+p),update(mid+,R,mid+,ed,p+p+);
}
int query(int x,int st,int ed,int p){
    if(st==x&&ed==x)return tree[p];
    )push_down(p,st,ed);
    ;
    if(x<=mid)return query(x,st,mid,p+p);else
               ,ed,p+p+);
}
ll quickmi(ll x,ll k){
    ll tmp=,a=x;
    ){
        ==){tmp=tmp*a%mo;}
        a=a*a%mo;k=k/;
    }return tmp;
}
void work(int st,int ed,int cc){
    ;
    <<(mid-st+))-,l2=(<<(ed-mid))-;
    ;u<=l1;u++)
     ;v<=l1-u;v++))||v!=){
            ,a2=,a3=,a4=;
            for(int i=st;i<=mid;i++){
                <<(i-st);
                )a1+=b[i]+;)a2+=b[i]+;
            }
            if(a1>a2)std::swap(a1,a2);
            ;return;}
            V[a2-a1]=;tot++;bb[tot]=a2-a1;
     }
       ;x<=l2;x++)
        ;y<=l2-x;y++))||y!=){
            ,a2=,a3=,a4=;
            ;i<=ed;i++){
                <<(i-mid-);
                )a3+=b[i]+;)a4+=b[i]+;
            }
            if(a3>a4)std::swap(a3,a4);
            ;return;}
            ){fool=;return;}
        } 

}
int main()
{
//freopen("yono.in","r",stdin);//freopen("my.out","w",stdout);
    scanf("%d%d%d",&n,&m,&mo);
    ;i<=n;i++)scanf("%lld",&a[i]);
    ;i<mo;i++) fa[i][]=i*i%mo*i%mo;
    ;j<=;j++)
      ;i<mo;i++)
        fa[i][j]=fa[fa[i][j-]][j-];
    ;cc<=m;cc++){
        int op,L,R;scanf("%d%d%d",&op,&L,&R);
        ){update(L,R,,n,);continue;}
        >)printf("Yuno\n");else{
            for(int i=L;i<=R;i++){
                ll tt=query(i,,n,),x=tt,tmp=,now=a[i];
                b[i]=a[i];
                ;j>=;j--)<<j)){
                   x-=<<j;b[i]=fa[b[i]][j]%mo;
                }
            }
            fool=;tot=;
            work(L,R,cc);
            ;i<=tot;i++)V[bb[i]]=;
            )printf("Yuno\n");else printf("Yuki\n");
        }
    }
} 

bzoj4722

[bzoj4722]由乃的更多相关文章

  1. 【BZOJ4722】由乃

    [BZOJ4722]由乃 题面 bzoj 题解 考虑到区间长度为\(14\)时子集个数\(2^{14}>14\times 1000\),由抽屉原理,区间长度最多为\(13\)(长度大于这个值就一 ...

  2. [BZOJ4722]由乃[鸽巢原理+bitset+倍增]

    题意 给定长为 \(n\) 序列 \(a\) ,要求支持两种操作: \(1.\) 询问在一个区间 \([l,r]\) 中,是否能够选出两个交集为空的集合 $ \rm X ,Y$, 使得 \(\sum_ ...

  3. [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)

    4722: 由乃 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 360  Solved: 131[Submit][Status][Discuss] D ...

  4. $bzoj4722$ 由乃 搜索

    正解:搜索 解题报告: 传送门$QwQ$ 首先发现长度为$len$的子集的值域为$[0,v\cdot len+len]$,数量为$2^{len}$.所以当$2^{len}\geq v\cdot len ...

随机推荐

  1. 记一次Suse下的Django环境配置——第一弹

    一.安装Python 由于原有Suse自带的Python版本只有2.4,因此首先需要安装Python的高版本,在这里我选择使用Python2.7.9.PS:之前选择使用2.7.11版本,由于没有zli ...

  2. MPMoviePlayerViewController

    MPMoviePlayerViewController        注意:需要添加MediaPlayer.framework    带有视频播放器的控制器(能够播放mp3.mp4.avi.mov格式 ...

  3. jquery-fullpage-js制作页全屏滚动插件

    有一个很棒的插件 http://www.ijquery.cn/demo/fullPage/

  4. 8. vim编辑器高级应用

    1. vim主要模式介绍 命令模式.命令行模式.编辑模式 字符操作:i 当前插入, I行首插入, a当前字符之后插入,A行首插入, ESC退出当前模式 2. vim命令模式 3. vim插入模式 4. ...

  5. 请不要重复犯我在学习Python和Linux系统上的错误

    本人已经在运维行业工作了将近十年,我最早接触Linux是在大二的样子,那时候只追求易懂,所以就选择了Ubuntu作为学习.使用的对象,它简单.易用.好操作.界面绚丽,对于想接触Linux的新手来说是非 ...

  6. ip地址转换

    通常,我们用点分十进制字符串表示ipv4地址(192.168.1.1),用十六进制字符串表示ipv6地址(fe80::20c:29ff:fee9:4bcc). ipv4转换函数 #include &l ...

  7. Ubuntu Server 14.04 --secure-file-priv error in MySql 解决方案

    在VPS部署Ubuntu 14.04服务器时,MySQL执行导出文件命令,报错: The MySQL server is running with the --secure-file-priv opt ...

  8. 3 Git服务器搭建

    1. 环境部署 系统环境:服务器端:CentOS 6.5 ,ip:192.168.56.1 客户端:CentOS 6.5 ,ip:192.168.56.101 软件版本:服务器端:源码编译安装,git ...

  9. cocos2d-js 学习笔记 --安装调试(2)

    对于初学者安装cocos2d-js的环境并没有教程中说的那么简单,至少笔者是这么认为的 第一步,下载cocos2d-js的SDK,(先别着急运行) 第二步,安装Cocos2d console ,(Ma ...

  10. markdownTest

    MARKDOWNTEST 11111111111111 有一种神奇的语言,它比html还简单,它巧妙地将内容与格式整合在一起--它就是Markdown 有一种神奇的语言,它比html还简单,它巧妙地将 ...