1. 程式人生 > >洛谷P3792 由乃與大母神原型和偶像崇拜

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

森林 splay cnblogs 神話 -a names hellip std ide

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分 線段樹

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