以下の内容はhttps://emtubasa.hateblo.jp/entry/2018/09/30/230000_1より取得しました。


AOJ 1148 - ログイン/ログアウト記録の解析

問題
提出コード

解法

時刻tに学生mがログインしているかどうかだけが知りたいため、実はPCの何番目がログインされているかどうか、という情報は特に必要ありません。
まずはいもす法を用いて下準備をします。
memo[i][j] = 学生iが時刻jに何台のPCでログインしているか、という情報を記録することにすると、
時刻xに学生yがログインしたときはmemo[y][x]に+1を、ログアウトしたときはmemo[y][x+1]に-1をしてあげた上で、すべての記録を入力し終えた後で、時刻0からの累積和を取ってあげれば、上の情報がうまく格納されます。
次に、sum[i][j] = 学生iがスタート時刻から時刻jまでに何分間ログインしていたか、という情報をいれることにします。
これは、

  1. memo[i][j]が1以上
    sum[i][j] = sum[i][j-1]+1

  2. memo[i][j]が0
    sum[i][j] = sum[i][j-1]

として累積和を取っていくと、うまく記録できます。
最後にクエリにこたえていきます。
学生mの、時刻xから時刻yまでのログイン時間は、
sum[m][y-1] - sum[m][x-1]
で求めることができます。




以上の内容はhttps://emtubasa.hateblo.jp/entry/2018/09/30/230000_1より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14