問題の概要は例によって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++;);
}
}