#include<iostream>
#include<vector>
#include<cstdio>
#include<map>
using namespace std;
int mx[2000010],mn[2000010],pm[2000010];
int n,m,ds;
map<int,int>id;
struct nod
{
int l,r,v;
};
vector<nod>s;
int rt[1000010];
vector<int>mm;
void add(int o,int l,int r,int x,int y)
{
if(l==r)
{
s[o].v=y;
return;
}
if(x<=(l+r>>1))
{
if(s[o].l==-1)
{
if(mm.empty())
{
s[o].l=s.size();
s.push_back((nod){-1,-1,0});
}
else
{
s[o].l=mm[mm.size()-1];
s[s[o].l]=(nod){-1,-1,0};
mm.pop_back();
}
}
add(s[o].l,l,(l+r>>1),x,y);
}
else
{
if(s[o].r==-1)
{
if(mm.empty())
{
s[o].r=s.size();
s.push_back((nod){-1,-1,0});
}
else
{
s[o].r=mm[mm.size()-1];
s[s[o].r]=(nod){-1,-1,0};
mm.pop_back();
}
}
add(s[o].r,(l+r>>1)+1,r,x,y);
}
s[o].v=0;
if(s[o].l!=-1)
{
s[o].v=max(s[o].v,s[s[o].l].v);
if(s[s[o].l].v==0)
{
mm.push_back(s[o].l);
s[o].l=-1;
}
}
if(s[o].r!=-1)
{
s[o].v=max(s[o].v,s[s[o].r].v);
if(s[s[o].r].v==0)
{
mm.push_back(s[o].r);
s[o].r=-1;
}
}
}
int ask(int o,int l,int r,int il,int ir)
{
if(il<=l&&ir>=r)
{
return s[o].v;
}
int re=0;
if(il<=(l+r>>1)&&s[o].l!=-1)
{
re=max(re,ask(s[o].l,l,(l+r>>1),il,ir));
}
if(ir>(l+r>>1)&&s[o].r!=-1)
{
re=max(re,ask(s[o].r,(l+r>>1)+1,r,il,ir));
}
return re;
}
void change(int o,int l,int r,int x,int y)
{
if(l==r)
{
if(id[mx[o]])
{
add(rt[id[mx[o]]],1,n,x,-x);
}
if(!id[y])
{
id[y]=++ds;
rt[ds]=s.size();
s.push_back((nod){-1,-1,0});
}
add(rt[id[y]],1,n,x,x);
mx[o]=mn[o]=y;
pm[o]=ask(rt[id[y]],1,n,1,x-1);
return;
}
if(x<=(l+r>>1))
{
change(o<<1,l,(l+r>>1),x,y);
}
else
{
change(o<<1|1,(l+r>>1)+1,r,x,y);
}
mx[o]=max(mx[o<<1],mx[o<<1|1]);
mn[o]=min(mn[o<<1],mn[o<<1|1]);
pm[o]=max(pm[o<<1],pm[o<<1|1]);
}
int rl,rr,rv;
void query(int o,int l,int r,int il,int ir)
{
if(il<=l&&ir>=r)
{
rl=min(rl,mn[o]);
rr=max(rr,mx[o]);
rv=max(rv,pm[o]);
return ;
}
if(il<=(l+r>>1))
{
query(o<<1,l,(l+r>>1),il,ir);
}
if(ir>(l+r>>1))
{
query(o<<1|1,(l+r>>1)+1,r,il,ir);
}
}
int main()
{
cin>>n>>m;
int op,x,y;
for(int i=1;i<=n;i++)
{
cin>>x;
change(1,1,n,i,x);
}
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&op,&x,&y);
if(op==1)
{
change(1,1,n,x,y);
}
if(op==2)
{
rl=(1<<30);
rr=-(1<<30);
rv=0;
query(1,1,n,x,y);
if(rr-rl==y-x&&rv<x)
{
printf("damushen\n");
continue;
}
printf("yuanxing\n");
}
}
return 0;
}
zk卡空间卡成了63分,宝贝们快来帮帮zk~