題目
發現這樣一句話就會導致\(t\)
ch[m][0]=++m;
並不是很知道為什麼,可能這是某種未定義行為在不同編譯器下會有不同後果?
至於這道題就很簡單了,幾個有關游標位置的操作就用乙個變數模擬就好了
插入的話把這個位置轉出來構造一棵完美\(splay\)插入就好了
刪除直接轉出區間斷開的父親的鏈結
輸出直接轉出區間中序遍歷
**
#include#include#include#include#define maxn 2100005
#define re register
char opt[15],s[maxn],val[maxn];
int n,root,pos,m,len;
int fa[maxn],ch[maxn][2],sz[maxn];
inline void update(int x)
inline void rotate(int x)
inline void splay(int x,int goal)
if(!goal) root=x;
}inline int kth(int x)
}void dfs(int x)
int build(int x,int y,int f)
int mid=x+y>>1,rt=++m;
val[rt]=s[mid];fa[rt]=f;
ch[rt][0]=build(x,mid-1,rt),ch[rt][1]=build(mid+1,y,rt);update(rt);
return rt;
}int main()
int aa=kth(pos),bb=kth(pos+1);
splay(aa,0),splay(bb,aa);
int t=ch[root][1],rt=build(1,len,t);
ch[t][0]=rt,update(t),splay(t,0);
} if(opt[0]=='d')
if(opt[0]=='g')
} return 0;
}
NOI2003 文字編輯器
很久很久以前,dos3.xdos3.xdos3.x 的程式設計師們開始對 edlinedlinedlin 感到厭倦。於是,人們開始紛紛改用自己寫的文字編輯器 多年之後,出於偶然的機會,小明找到了當時的乙個編輯軟體。進行了一些簡單的測試後,小明驚奇地發現 那個軟體每秒能夠進行上萬次編輯操作 當然,你不...
cogs 330 NOI2003 文字編輯器
輸入檔案 editor2003.in輸出檔案 editor2003.out簡單對比 時間限制 2 s 記憶體限制 128 mb 問題描述 很久很久以前,dos3.x的程式設計師們開始對edlin感到厭倦。於是,人們開始紛紛改用自己寫的文字編輯器 多年之後,出於偶然的機會,小明找到了當時的乙個編輯軟體...
題解 P4008 NOI2003 文字編輯器
link 在 insert 操作中可能存在換行符,你需要忽略掉它們,但是保證所有的字元的 ascii 碼在 32 126 內。保證 insert 操作插入的總長度不超過 2 個。保證游標不會移到非法位置,保證刪除,查詢的字元存在。發現有區間插入,區間刪除,考慮用 splay 維護。用乙個變數維護當前...