数据是不是有点水,O(nq)艹过去了
查看原帖
数据是不是有点水,O(nq)艹过去了
250699
mot1ve楼主2021/10/25 12:21

就光用了个vector模拟平衡树

#include<bits/stdc++.h>
using namespace std;
int n,Q,x,v;
int a[8010];
map<int,int> mp;
vector<int> g;
int main()
{
	cin>>n>>Q;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		g.insert(lower_bound(g.begin(),g.end(),a[i]),a[i]);
		mp[a[i]]++;
	}
	while(Q--)
	{
		int op;
		scanf("%d",&op);
		if(op==1)//修改 
		{
			scanf("%d%d",&x,&v);
			int t=a[x];
			a[x]=v;
			mp[t]--;
			mp[v]++;
			g.erase(lower_bound(g.begin(),g.end(),t));
			g.insert(lower_bound(g.begin(),g.end(),v),v);
		}
		if(op==2)
		{
			int cnt=0;
			scanf("%d",&x);
			for(int i=1;i<x;i++)
			{
				if(a[i]==a[x])
				cnt++;
			}
			int p=lower_bound(g.begin(),g.end(),a[x])-g.begin()+1;
			printf("%d\n",p+cnt);
		}
	}
	return 0;
} 
2021/10/25 12:21
加载中...