• 体前屈大赛(桶排序)


    试题G:体前屈大赛 20’
    描述
    某校的火柴部部长拟定向筋肉部发起一场特别的活动:体前屈大赛

    比赛流程是:公布规则->体前屈测试->颁发奖牌

    比赛规则:初始参赛人员共有nn人,已知在体前屈测试后会有qq次特殊事件tt发生:

    t=1t=1类事件:中途加入一名隐藏选手,已知他的体前屈成绩为kk;
    t=2t=2类事件:将所有参赛人员根据体前屈成绩从左到右升序排序,并给从左到右数第kk个选手颁发倒霉奖
    注:颁发了倒霉奖牌的选手仅仅是拥有奖牌,奖牌不会影响这位选手原来的性质与作用。

    体前屈测试:在体前屈测试中初始参赛人员每人都会有一个体前屈成绩ai。

    颁发奖牌:你是一名有一说一的纯路人裁判,颁发奖牌的任务降临到了你的头上

    在你每一次颁发奖牌时,都要报出这位倒霉的选手的体前屈成绩!

    请你利用你的计算机优势,编写一个程序, 根据已知条件输出每一次颁发奖牌时, 你需要报出的成绩。

    输入
    第一行输入2个整数n,q;

    第二行输入n个整数ai(- 1000≤ai < 1000)
    第3至(q+ 2)3至(q+2)行每行输入2个整数
    t,k;t=1时,-1000<=k<=1000
    )

    能够保证至少有一个t = 2,即不会出现没有输出的情况。

    输出
    对于每个t = 2输出1个整数

    样例
    输入复制
    5 8
    -1000 1000 4 -5 0
    2 1
    2 2
    2 3
    2 4
    2 5
    1 -1000
    2 1
    2 2
    输出复制
    -1000
    -5
    0
    4
    1000
    -1000
    -1000
    提示
    数据规模

    对于100%的数据,n<=1e6,1≤q≤10000

    #include <stdio.h>
    #include <stdlib.h>
    int n,q,a[1000005],t,k,p,w;
    int main()
    {
    	scanf("%d%d",&n,&q);
    	for(int i=0;i<n;i++)
    	{
    		scanf("%d",&p);
    		a[p+1000]++; 
    	}
    	while(q--)
    	{
    		w=0;
    		scanf("%d%d",&t,&k);
    		if(t==1)
    		{
    			a[k+1000]++;			
    		}
    		else
    		{
    			for(int i=0;i<=2000;i++)
    			{
    				if(a[i])
    				{
    					if(w+a[i]>=k)
    					{
    						printf("%d
    ",i-1000);
    						break;
    					}
    					else
    					{
    						w+=a[i];
    					}
    				}
    			}
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    POJ2774 Long Long Message
    Lyndon Word相关
    后缀自动机(SAM)
    后缀数组(SA)
    [THUSC2016]补退选
    [HNOI2008]GT考试
    CF1080E Sonya and Matrix Beauty
    [JSOI2008]火星人
    两道FFT题目略解
    网络流概念+EdmondKarp算法+Dinic(Dinitz)
  • 原文地址:https://www.cnblogs.com/fxzemmm/p/14847991.html
Copyright © 2020-2023  润新知