きゅーちゃん
問題の概要は例によってnanagyouさんのとこから
http://geocities.yahoo.co.jp/gl/nanagyou/view/20070213/1171325087
手抜きですまぬのぅ。
キューに入ったn個の優先度つきジョブのうちm番目のものが何番目に出力されるかという問題。
入力はn,mに続いてn個の優先度なので、読み込み部分がちと難しい。私が書いてみたのはnだけ最初に読み込んで、残りは一気にfor文で読み込むという方法。これだとscanfを2回使ってしまっているけど、書式部分が同じなので変数を使って多少縮みます。不等号に=が入ってたり全体の構造が結構ややこしいので、じっくり考えればまだまだ短縮できるでしょうね。。。
v[],*p,*q,i; main(n,s) { for(gets(v);~scanf(s="%d\n",&n);printf(s,i-n)) { for(i=-1;i<n;)scanf(s,++i+v); for(p=v;p;p[n]=*p,q-p<=n||*v*--n?q:p=0,*v-=*v?1:1-n) for(q=++p;*p>=*q++;); } }