• 洛谷P3792 由乃与大母神原型和偶像崇拜


    P3792 由乃与大母神原型和偶像崇拜

    题目背景

    由乃最近没事干,去研究轻拍学去了

    就是一个叫做flip flappers,轻拍翻转小膜女的番

    然后研究的过程中她看到了一个叫做大母神原型的东西

    大母神不仅是部落保护神,而且是部落间互相识别的标记(以后泛化为不同的图形符号、服饰和祭祀仪式),在部落联盟出现后,具有领导力的部落神祇,上升为整个联盟的共神,进而成为酋邦和王国的共神

    大概就是说这个东西是母系社会时候的偶像,然后象征着母亲可以创造生命也可以毁灭生命什么什么的,分别是善母与恶母,既孕育一切,又吞噬一切

    然后我们熟知的神话里面就有大母神,比如女娲其实就是个大母神。。。

    原始部落时期的大母神既具有生育和哺乳的能力,也具有保护部落、带来丰收的神力。

    到了神话时期,大母神进一步分化,演变出形形色色的女神,分别象征了女性能量的不同面向:孕育女神、大地女神、爱与美女神、保护女神、战争女神、丰收女神、智慧女神、命运女神……

    这些是善母

    世间的事物总是两面性的:一切生命诞生于土地,最终要回归土地;创造的必然也拥有毁灭的能力。大母神也同样具有痛苦、恐怖、吞噬和危险的一面。

    比如童话故事里面的女巫,其实就是大母神的另一面的体现,也就是恶母

    糖果屋的故事讲的就是韩赛尔和格雷特被继母赶出家里,因为没饭吃了,然后进了森林发现了一个糖果屋,里面有个女巫,专门吃小孩子

    然而如果我们仔细想想这个故事,会发现它没有那么简单

    比如说,女巫真的是吃小孩子吗?如果女巫是个善良的老婆婆,无偿救助在森林里面困住的小孩子呢?

    还有就是当韩赛尔和格雷特杀死了女巫,回到家中发现她们的继母也死了

    这是否意味着她们实际上杀死的是她们的继母?

    所以这个故事本质上讲的是她们杀了她们的母亲,也就是打败了大母神

    很多神话故事里面都有打败大母神的情节

    题目描述

    你看到这里也许已经觉得由乃精神不正常了

    然而由乃自从不小心##了自己的##后早就不正常了

    由乃研究了很久大母神原型,但是仍然一脸懵逼

    于是就出数据结构题骗钱去了

    由乃:给你一个序列,每次询问一个区间是否是值域连续段

    zzy:你把题意说详细点

    由乃:就是说不能有重复数字,比如1 2 2 3就不行,然后4 2 3 1就可以

    yql:sb分块

    ddd:sb bitset

    由乃:woc你们好树链啊,我。。我带修

    zzq:#######sb题

    由乃:我就是要出原题

    给你一个序列a

    每次两个操作:

    1.修改x位置的值为y

    2.查询区间l,r是否可以重排为值域上连续的一段

    输入输出格式

    输入格式:

    第一行两个数n,m

    第二行n个数表示a[i]

    后面m行每行三个数opt x y,或者opt l r,代表操作

    输出格式:

    如果可以,输出“damushen”

    否则输出“yuanxing”

    输入输出样例

    输入样例#1: 复制
    5 5
    1 2 3 4 5
    2 1 5
    2 2 3
    2 3 3
    1 3 6
    2 3 5
    输出样例#1: 复制
    damushen
    damushen
    damushen
    damushen

    说明

    对于30%的数据,n,m<=500

    对于60%的数据,n,m<=100000

    对于100%的数据,n,m<=500000

    值域1e9

    2s

    #include<iostream>
    #include<cstdio>
    #include<map>
    #include<algorithm>
    #define maxn 500001
    using namespace std;
    int a[maxn],n,m,l,r,b[maxn],cnt;
    int op,x,y;
    bool flag;
    map<int,bool>vis;
    int main(){
        freopen("Cola.txt","r",stdin);
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        for(int i=1;i<=m;i++){
            scanf("%d%d%d",&op,&x,&y);
            if(op==1)a[x]=y;
            if(op==2){
                flag=0;
                cnt=0;
                for(int j=x;j<=y;j++)b[++cnt]=a[j];
                sort(b+1,b+cnt+1);
                for(int j=1,num=b[1];j<=cnt;j++,num++){
                    if(b[j]!=num){
                        flag=1;
                        puts("yuanxing");
                        break;
                    }
                }
                if(flag==0)puts("damushen");
                continue;
            }
        }
    }
    70分 暴力
    #include<bits/stdc++.h>
    const int yql=998244353;
    const int N=500010;
    const int inf=0x7fffffff;
    using namespace std;
    typedef long long ll;
    int n,m,a[N],mx,mn,x,y,inv;
    ll ss,sum;
    inline int read(){
        int f=1,x=0;char ch;
        do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');
        do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');
        return f*x;
    }
    inline int fpow(int x,int p){
        int ans=1;
        for(;p;p>>=1,x=(1LL*x*x)%yql)if(p&1)ans=(1LL*ans*x)%yql;
        return ans;
    }
    inline int calc(int x){return 1LL*x*(x+1)%yql*(x<<1|1)%yql*inv%yql;}
    struct Segment_Tree{
    #define lson (o<<1)
    #define rson (o<<1|1)
        int maxv[N<<2],minv[N<<2];
        ll sumv[N<<2],s[N<<2];
        inline void pushup(int o){
            maxv[o]=max(maxv[lson],maxv[rson]);
            minv[o]=min(minv[lson],minv[rson]);
            sumv[o]=(sumv[lson]+sumv[rson])%yql;
            s[o]=s[lson]+s[rson];
        }
        inline void build(int o,int l,int r){
            if(l==r){maxv[o]=minv[o]=s[o]=a[l];sumv[o]=(1LL*a[l]*a[l])%yql;return;}
            int mid=(l+r)>>1;
            build(lson,l,mid);build(rson,mid+1,r);
            pushup(o);
        }
        inline void change(int o,int l,int r,int q,int v){
            if(l==r){maxv[o]=minv[o]=s[o]=v;sumv[o]=(1LL*v*v)%yql;return;}
            int mid=(l+r)>>1;
            if(q<=mid)change(lson,l,mid,q,v);
            else change(rson,mid+1,r,q,v);
            pushup(o);
        }
        inline void query(int o,int l,int r,int ql,int qr){
            if(ql<=l&&r<=qr){
                mx=max(maxv[o],mx);mn=min(mn,minv[o]);sum=(sum+sumv[o])%yql;ss+=s[o];
                return;
            }
            int mid=(l+r)>>1;
            if(ql<=mid)query(lson,l,mid,ql,qr);
            if(qr>mid)query(rson,mid+1,r,ql,qr);
        }
    }T;
    int main(){
        n=read();m=read();inv=fpow(6,yql-2);
        for(int i=1;i<=n;i++)a[i]=read();
        T.build(1,1,n);
        while(m--){
            int opt=read(),l=read(),r=read();
            if(opt==1)T.change(1,1,n,l,r);
            else{
                mx=0;mn=inf;ss=0;sum=0;
                T.query(1,1,n,l,r);
                if(mx-mn==r-l&&(1LL*(mx+mn)*(r-l+1))>>1==ss&&(calc(mx)-calc(mn-1)+yql)%yql==sum)puts("damushen");
                else puts("yuanxing");
            }
        }
    }
    100分 线段树
  • 相关阅读:
    3(翻译)如何在cocos2d里面使用动画和spritesheet
    Objectivec2.0 每种数据类型定义属性的方法
    cocos2d 入门必备4个基本概念
    如何在Mac上搭建自己的服务器——Nginx
    JN_0001:在微信朋友圈分享时长大于10s的视频
    JN_0002:Win10禁止U盘拷贝文件的方法
    abstract class 和 interface区别
    ref和out
    .Net配置错误页
    Unity3d 物体沿着正七边形轨迹移动
  • 原文地址:https://www.cnblogs.com/thmyl/p/7731702.html
Copyright © 2020-2023  润新知