求助 STL #6 RE
查看原帖
求助 STL #6 RE
923827
Ysunlight楼主2024/11/23 22:11

这满打满算也才100M不到啊

#include <bits/stdc++.h>
using namespace std;

const int N=5e5+5;
int n,q,a[N],b[N],lst[N]; 

multiset<long long> all_min,side_min,all;

int main() {
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		all.insert(a[i]);
		if(i!=1) side_min.insert( abs(a[i]-a[i-1]) );
		lst[i]=a[i];
		b[i]=a[i];
	} 
	sort(b+1,b+n+1); 
	for(int i=1;i<n;i++) all_min.insert( abs(b[i]-b[i+1]));
	while(q--){
		string op;
		cin>>op;
		if(op=="INSERT"){
			int pos,num;
			cin>>pos>>num;
			all.insert(num);
			auto it = all.find(num);
			auto x = ++it, y = --(--it);
			++it; 
			if(it!=all.begin() && x!=all.end() ){
				auto old=all_min.find( *x - *y );
				all_min.erase(old);	
			}
			if(it!=all.begin()){
				all_min.insert( *it - *y );
			} 	
			if(x!=all.end() ){
				all_min.insert( *x - *it );	
			}
			//总体 
			if(pos!=n){
				int old=abs(a[pos+1]-lst[pos]);
				side_min.erase( side_min.find(old));
				side_min.insert( abs(a[pos+1]-num) );
				side_min.insert( abs(lst[pos]-num) );
			}
			//两边 
			lst[pos]=num;
		}
		if(op=="MIN_GAP"){
			auto ans=side_min.begin();
			cout<<*ans<<endl;
		}
		if(op=="MIN_SORT_GAP"){
			auto ans=all_min.begin();
			cout<<*ans<<endl;
		}
	} 
	return 0;
}
/*
6 4
3 7 14 9 5 18
*/

2024/11/23 22:11
加载中...