联系一下块状链表在这就 WA 成零分了。
感觉可能是我的输入出锅了?
或许洛谷数据非常强?
#include <bits/stdc++.h>
#define mp make_pair
#define fi first
#define se second
using namespace std;
typedef pair<int,int> pi;
const int sz=1000;
vector<string> bl;
pi pos(int x){
for(int i=0;i<bl.size();i++){
if(x<bl[i].size()) return mp(i,x);
x-=bl[i].size();
}
return mp(0,0);
}
void upd(int x){
if(x==bl.size()) return;
if(bl[x].size()==0) bl.erase(bl.begin()+x),upd(x);
else if(bl[x].size()>sz*2){
bl.insert(bl.begin()+x+1,bl[x].substr(bl[x].size()-sz));
bl[x].erase(bl[x].size()-sz);upd(x);
}
}
int main(){
ios::sync_with_stdio(false);
bl.push_back("124");
int t,n,k=0;cin>>t;
while(t--){
string op,s,h;cin>>op;
if(op=="Insert"){
cin>>n;getline(cin,s);
while(s.size()<n) getline(cin,h),s+=h;
pi p=pos(k);
bl[p.fi].insert(p.se,s);upd(p.fi);
}else if(op=="Move") cin>>k;
else if(op=="Delete"){
cin>>n;pi p=pos(k);
for(int i=p.fi,j=p.se;n;i++,j=0){
int l=min(j+n,(int)bl[i].size())-j;
bl[i].erase(j,l);n-=l;
}
upd(p.fi);
}else if(op=="Get"){
cin>>n;pi p=pos(k);
for(int i=p.fi,j=p.se;n;i++,j=0){
int l=min(j+n,(int)bl[i].size())-j;
cout<<bl[i].substr(j,l);n-=l;
}
cout<<endl;
}else if(op=="Prev") k--;
else k++;
}
return 0;
}
```cpp