一、题目
二、解法
还是存每个名字对应的键值和键值对应的名字,把键值塞进平衡树。
这道题还要分清楚插入的顺序,所以我们重新定义一个权值计算方法 v a l = r e a d × 1 e 6 + o r d e r val=read\times 1e6+order val=read×1e6+order,这样就可以区分出顺序了,用 m p mp mp存一下就行了。
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <map>
#define int long long
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
const int MAXN = 500005;
int read()
{
int x=0,flag=1;char c;
while((c=getchar())<'0' || c>'9') if(c=='-') flag=-1;
while(c>='0' && c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
return x*flag;
}
int n,rt,Index;
int ch[MAXN][2],cnt[MAXN],siz[MAXN],val[MAXN],hp[MAXN];
map<string,int> v;
map<int