Submission #3451817


Source Code Expand

using System;
using System.Linq;//リストの使用
using System.Collections.Generic;
class Program
{
static long n = long.Parse(Console.ReadLine());
static long[] nums = new long[n];
static long[][] numsSub = new long[n][];
static long[] rightMin = new long[n];//長さがi+1のときの右端の最小値
static long answer = 1;
static long compareMemo = new long;

	static void Main()
	{
    for(long i = 0; i < n; i++)
    {
      string[] input = Console.ReadLine().Split(' ');
  		numsSub[i][0] = long.Parse(input[0]);
  		numsSub[i][1] = long.Parse(input[1]);
    }
    Array.Sort(numsSub, (a, b) => a[0].CompareTo(b[0]));//xのみソート
    long minMemo = 0;//最小数
    long minMemoNum = -1;//最小数の更新回数
    for(long i = 0; i < n; i++)
    {
      if(numsSub[i][0] > minMemo)
      {
        minMemoNum++;
        nums[minMemoNum] = numsSub[i][1];
        minMemo = numsSub[i][0];
      }else
      {
        nums[minMemoNum] = Math.Min(nums[minMemoNum], numsSub[i][1]);
      }
    }
    
    rightMin[0] = nums[0];

    for(long i = 1; i < n; i++)
    {
      if(nums[i] > rightMin[answer-1])
      {
        rightMin[answer] = nums[i];
        answer++;
      }else
      {
        compareMemo = nums[i];
        rightMin[Search(0, answer-1)] = nums[i];//更新位置を二部探索する
      }
    }
    
		Console.WriteLine(answer);
	}

  static long Search(long min, long max)//二分探索法で最小値を求める
  {
    while (true)
    {
      long mid = min + (max - min) / 2;
      if(Check(mid)) max = mid;//さらに大きくても成り立つかも
      else min = mid;

      if(max - min <= 1)
      {
        if(Check(min)) 
        {
          return min;//最小値で成り立つかの確認を優先
        }
        else
        {
          return max;
        }
      break;
      }  
    }
  }

  static bool Check(long testNum)
  {
    if(rightMin[testNum] >= compareMemo) return true;//同じ数で右端を複数にしないように、等号を含む
    return false;
  }

}

Submission Info

Submission Time
Task D - プレゼント
User suikameron
Language C# (Mono 4.6.2.0)
Score 0
Code Size 2124 Byte
Status CE

Compile Error

./Main.cs(11,34): error CS1525: Unexpected symbol `;', expecting `(', `[', or `{'