1 条题解

  • 0
    @ 2023-12-22 15:11:30
    //使用sort(a+1,a+n+1)进行从小到大排序
    //int cnt=unique(a+1,a+n+1)-(a+1)得到排序去重以后的数目
    //int k=lower_bound(a+1,a+cnt+1,d[i])-a;
    ////在a[1]到a[cnt]中寻找d[i]第一次出现的位置 
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int a[N],d[N];//原数组和离散化数组
    int main()
    {
    	int T,n;
    	cin>>T;
    	while(T--)
    	{
    		cin>>n;
    		for(int i=1;i<=n;i++)
    		{
    			cin>>a[i];
    			d[i]=a[i];//同步原数组数据
    		} 
    		sort(a+1,a+n+1);//第一步排序
    		int cnt=unique(a+1,a+n+1)-(a+1);//去重
    		for(int i=1;i<=n;i++)
    		{
    			d[i]=lower_bound(a+1,a+cnt+1,d[i])-a;//在a[1]到a[cnt]中寻找d[i]第一次出现的位置 
    		}
    		for(int i=1;i<=n;i++) 
    		{
    			cout<<d[i]<<" ";
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    1614
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者