求教优化内存方法
查看原帖
求教优化内存方法
552286
流光萤影楼主2023/9/2 16:29

STL\verb!STL! 做法,MLE\verb!MLE! 22 个点,92\verb!92! 分

话说题目内存限制不是 1.50GB\verb!1.50GB! 吗,这个程序占用内存最大的测试点用了 1.14GB\verb!1.14GB!,为什么显示 MLE?\verb!MLE!?

#include<bits/stdc++.h>
#include<ext/rope>
using namespace __gnu_cxx;
using namespace std;
rope<int> a[500003];
int n,x,v,add,m[500003];
char xu;
int main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin >> n;
	for(int i = 1;i <= n;i++)
	{
		cin >> v >> xu >> x;
		if(xu == '1')
		{
			while(m[v]) v = m[v];
			a[i] = a[v],a[i].insert(lower_bound(a[i].begin(),a[i].end(),x)-a[i].begin(),x);
		}
		if(xu == '2')
		{
			while(m[v]) v = m[v];
			a[i] = a[v];
			if(a[i].size())
			{
				add = lower_bound(a[i].begin(),a[i].end(),x)-a[i].begin();
				if(add < a[i].size() && a[i][add] == x) a[i].erase(add,1);
			}
		}
		if(xu == '3')
		{
			while(m[v]) v = m[v];
			m[i] = v;
			cout << lower_bound(a[v].begin(),a[v].end(),x)-a[v].begin()+1 << "\n";
		}
		if(xu == '4')
		{
			while(m[v]) v = m[v];
			m[i] = v;
			cout << a[v][x-1] << "\n";
		}
		if(xu == '5')
		{
			while(m[v]) v = m[v];
			m[i] = v;
			add = lower_bound(a[v].begin(),a[v].end(),x)-1-a[v].begin();
			if(add < 0) cout << "-2147483647\n";
			else cout << a[v][add] << "\n";
		}
		if(xu == '6')
		{
			while(m[v]) v = m[v];
			m[i] = v;
			add = upper_bound(a[v].begin(),a[v].end(),x)-a[v].begin();
			if(add == a[v].size()) cout << "2147483647\n";
			else cout << a[v][add] << "\n";
		}
	}
	return 0;
}
2023/9/2 16:29
加载中...