题目背景
由乃最近没事干,去研究轻拍学去了
就是一个叫做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”
输入输出样例
5 5 1 2 3 4 5 2 1 5 2 2 3 2 3 3 1 3 6 2 3 5
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; } } }
#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"); } } }