Isa@Diary

ソフトウェア開発やってます。プログラミングとか、US生活とかについて書きます。

Codeforces Round 119(Div.2)

結果

oo--- (+0/-0) 1290pts 357th
1536->1501
敗戦…勝ちがTopcoderに、負けがCodeforcesに集中している気がする。

A

全探索やるだけ、とかいって4000^3投げる->TLE
ですよねーといいつつ4000^2投げる->WA
n-(a*i+b*j)>0のチェックを入れてなかった…

  • >pretest passed.

B

菱形という英単語を覚えた。全探索やるだけ。

C

解けなかった、解けるべきだった。
元の数列をA、目的の数列をBとすると
あるk番目までは整列されているようなkを探す。
(a[0]...a[k]までの任意のx,yについて、a[i]=x,a[j]=yとしたときにi

#include <iostream>

int a[200001], pos[200001];

using namespace std;

int main(){
    int n,t;
    cin >> n;

    for(int i=0;i<n;i++){
        cin >> a[i];
    }
    for(int i=0;i<n;i++){
        cin >> t;
        pos[t] = i;
    }

    int k = 1;
    while(1){
        if(pos[a[k]] <= pos[a[k-1]]) break;
        k++;
    }
    cout << n - k << endl;
}