zoukankan      html  css  js  c++  java
  • 解题报告 问题1

    1. 题目 1.Problem1 首先,读入一个数n,n代表了下面的操作数,从第2至第n+1 行,每行有一个字符ch和一个数字q,若数字为i,代表将数字q加入数字序列中;若数字为f,代表让你找到数字序列中第q大的数字为多少(保证序列中至少为q个数字,即不会出现误解的情况)。

    输入样例:

    2

    i 1

    f 1

    输出样例

    1

    50%数据,n<=5000; 100%数据 n<=25 0000

    题目实质

    乍看,是一模拟。 事实上,模拟的都报 0 。 算法 Quicksort 过 5 个点。 Bst (二叉排序树),全点。 剩下的,就不用再说了吧。 注意事项 哥们,不要以为第一题就不会考你数据结构。

    代码 Bst + 模拟链表 (魂之挽歌)

    program test1;

    type tree=record

    x:longint;

    l,r,z,y:longint;

    end;

    var a:array[0..500000]of tree;

    i,j,n,k,tot:longint;

    c,ch:char;

    procedure insert(i,j:longint);

    begin

    if a[j].x<a[i].x then

    begin

    inc(a[i].z);

    if a[i].l=0 then a[i].l:=j else insert(a[i].l,j);

    end

    else

    begin

    inc(a[i].y);

    if a[i].r=0 then a[i].r:=j else insert(a[i].r,j);

    end;

    end;

    procedure find(i,x:longint);

    var t:longint;

    begin

    if x=a[i].y+1 then

    begin

    writeln(a[i].x);

    exit;

    end;

    if a[i].y>=x then find(a[i].r,x) else find(a[i].l,x-a[i].y-1);

    end;

    begin

    assign(input,'problem1.in');reset(input);

    assign(output,'problem1.out');rewrite(output);

    readln(n);

    readln(c,ch,k);

    a[1].x:=k;tot:=1;

    for i:=2 to n do

    begin

    readln(c,ch,k);

    if c='i' then

    begin

    inc(tot);

    a[tot].x:=k;

    insert(1,tot);

    end

    else

    find(1,k);

    end;

    close(input);close(output);

    end.

  • 相关阅读:
    质数学习笔记
    一本通 1615:【例 1】序列的第 k 个数
    2019.05.09考试解题报告
    洛谷 P1057 传球游戏
    浅谈逆序对
    Set学习笔记
    洛谷 P1115 最大子段和
    洛谷 P1234 小A的口头禅
    About Her
    洛谷 P1164 小A点菜
  • 原文地址:https://www.cnblogs.com/SueMiller/p/2215394.html
Copyright © 2011-2022 走看看