为啥我咋darkbzoj上过了这题
查看原帖
为啥我咋darkbzoj上过了这题
80679
Register楼主2021/7/10 12:34

联系一下块状链表在这就 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
2021/7/10 12:34
加载中...