STL 做法,MLE 2 个点,92 分
话说题目内存限制不是 1.50GB 吗,这个程序占用内存最大的测试点用了 1.14GB,为什么显示 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;
}