zoukankan      html  css  js  c++  java
  • 河南多校联合训练 南阳理工 1261 音痴又音痴的LT

    描述

    LT最近一直在无限循环薛之谦的歌,简直都中毒了!可是呢…他的歌LT还是不会唱(其实不止他的歌LT不会唱,所有人的歌LT都不会唱…因为LT是标准的音痴)可是LT又很喜欢唱歌(所以LT不仅是音痴还是音痴)…没错,这对于LT的室友来说简直是噩梦…

        现在呢,LT有N次操作,每次操作只会有两种可能:

      I a: 表示着LT使用唱歌软件唱歌得到的分数。

      Q k: 表示着LT想知道自己得到的第k小的分数是多少。(如果没有第k小,输出-1)

     
    输入
    有多组输入(不超过20组),每组输入的第一行是一个N,表示有N次操作。(0<N<100000)
    接下来的2到N+1行每行有一个操作op和一个数字num。op只可能是I或Q,0<=num<1000000
    输出
    对于每一个Q操作,输出对应的答案~(~ ̄▽ ̄)~
    样例输入
    10
    Q 123
    I 123
    I 32
    Q 1
    Q 2
    Q 2
    I 32
    Q 1
    Q 2
    Q 3
    样例输出
    -1
    32
    123
    123
    32
    32
    123

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1261

    ************************************************

    T完了之后就蒙了,只过了一遍啊,审核一遍,就想到sort的复杂度是nlogn,然后想原始二分吧,分完了又好像不太会排序问题了,找复杂度更低的排序方法吧,找到了个桶排序O(n),可惜貌似应用不了,直到后来的后来,才恍然想起刚了解不久的二分函数,在二分函数的基础上认识了插入排序这种排序方法。O(logn).

    插入排序实现过程:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #define N 8
     4 void insert_sort(int a[],int n);
     5 //插入排序实现,这里按从小到大排序
     6 void insert_sort(int a[],int n)//n为数组a的元素个数
     7 {
     8 //进行N-1轮插入过程
     9 for(int i=1; i<n; i++)
    10 {
    11 //首先找到元素a[i]需要插入的位置
    12 int j=0;
    13 while( (a[j]<a[i]) && (j<i))
    14 {
    15 j++;
    16 }
    17 //将元素插入到正确的位置
    18 if(i != j)  //如果i==j,说明a[i]刚好在正确的位置
    19 {
    20 int temp = a[i];
    21 for(int k = i; k > j; k--)
    22 {
    23 a[k] = a[k-1];
    24 }
    25 a[j] = temp;
    26 }
    27 }
    28 }
    29 int  main()
    30 {
    31 int num[N] = {89, 38, 11, 78, 96, 44, 19, 25};
    32 insert_sort(num, N);
    33 for(int i=0; i<N; i++)
    34 printf("%d  ", num[i]);
    35 printf("
    ");
    36 system("pause");
    37 return 0;
    38 }

    AC代码:

     1  #include<stdio.h>
     2 #include<string.h>
     3 #include<math.h>
     4 #include<queue>
     5 #include<algorithm>
     6 #include<time.h>
     7 #include<stack>
     8 #include<vector>
     9 using namespace std;
    10 #define N 120000
    11 #define INF 0x3f3f3f3f
    12 
    13 vector<int >Q;
    14 
    15 int main()
    16 {
    17     int T,a,j;
    18     char s[10];
    19 
    20     while(scanf("%d", &T) != EOF)
    21     {
    22         Q.clear();
    23 
    24        for(j=0;j<T;j++)
    25         {
    26             scanf("%s%d", s, &a);
    27 
    28             if(s[0]=='I')
    29             {
    30                 int x=upper_bound(Q.begin(),Q.end(),a)-Q.begin();
    31                 Q.insert(Q.begin()+x,a);
    32             }
    33             else
    34             {
    35                 int len=Q.size();
    36 
    37                 if(a>len)
    38                     printf("-1
    ");
    39                 else
    40                     printf("%d
    ", Q[a-1]);
    41             }
    42         }
    43     }
    44     return 0;
    45 }

     

  • 相关阅读:
    EBS 获取用户密码
    Using Create directory & UTL_FILE in Oracle
    Loops with PL/SQL
    Create trigger
    Oracle DB解锁和 rerun FA depreciation
    oracle中数组的运用
    FNDLOAD使用大全
    不安装Oracle客户端,透过PL/SQL Developer连接Server DB
    R12组织屏蔽
    Oracle DB Link创建
  • 原文地址:https://www.cnblogs.com/weiyuan/p/5796453.html
Copyright © 2011-2022 走看看