[コードテストC+]新入社員


今日の質問


https://www.acmicpc.net/problem/1946

新入社員


  • 問題分析
    100000=>O(Nlog(N))の最大値を入力するアルゴリズム
    並べ替えのための時間的複雑度O(log(N))
    シーケンシャルナビゲーション最大O(N)
  • 私の答え

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    using namespace std;
     
    const int MAX = 100000;
    pair<int, int> e[MAX];
    int n;
    
    // 신입사원
    int solution(){
        int answer = 1;
        sort(e, e+n);
        int mini = e[0].second;
        for(int i=1;i<n;i++){
            if(e[i].second < mini){
                answer++;
                mini = e[i].second;
            }
            if(mini == 1)
                return answer;
        }
        
        return answer;
    }

    解法

  • 論理が正しいのに、なぜタイムアウトしたのか!!長いこと悩んだ.Vectorに入力してソリューションに送信するプロセスに時間がかかる可能性があります...その結果、I/Oでの時間にエラーが発生しました.これからも白俊で解き続けるのでよく考えてから書きます.
  • ファイル順でも面接順でも昇順で並べ替えた後、並べ替え領域の1位の他の点数より小さいと答えが出ます.そして更新します.
  • 別の答え

    #include<iostream>
    #include<cstdio>
    
    using namespace std;
    
    int T;
    int N;
    int v[100001];
    int main(void)
    {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    
    	cin >> T;
    
    	for (int t = 0; t < T; t++)
    	{
    		cin >> N;
    		for (int n = 0; n < N; n++)
    		{
    			int n1, n2;
    			cin >> n1 >> n2;
    			v[n1] = n2;
    		}
    
    		int tmp = v[1];
    		int cnt = 1;
    		for (int n = 2; n <= N; n++)
    		{
    			if (tmp >= v[n])
    			{
    				tmp = v[n];
    				cnt++;
    			}
    		}
    
    		cout << cnt << "\n";
    
    	}
    
    	return 0;
    
    }

    学ぶべきところ

  • cin.tie(0); 聖書は実行速度を高めたという.ぜひ使ってみてください.