Problem:
 Score : 400 points    Problem Statement Joisino is planning to record N TV programs with recorders.  The TV can receive C channels numbered 1 through C .  The i -th program that she wants to record will be broadcast from time s_i to time t_i (including time s_i but not t_i ) on Channel c_i .  Here, there will never be more than one program that are broadcast on the same channel at the same time.  When the recorder is recording a channel from time S to time T (including time S but not T ), it cannot record other channels from time S-0.5 to time T (including time S-0.5 but not T ).  Find the minimum number of recorders required to record the channels so that all the N programs are completely recorded.      Constraints  1≤N≤10^5  1≤C≤30  1≤s_i<t_i≤10^5  1≤c_i≤C  If c_i=c_j and i≠j , either t_i≤s_j or s_i≥t_j .  All input values are integers.         Input Input is given from Standard Input in the following format:  N  C  s_1  t_1  c_1  :  s_N  t_N  c_N       Output When the minimum required number of recorders is x , print the value of x .        Sample Input 1 3 2
1 7 2
7 8 1
8 12 1      Sample Output 1 2  Two recorders can record all the programs, for example, as follows:   With the first recorder, record Channel 2 from time 1 to time 7 . The first program will be recorded. Note that this recorder will be unable to record other channels from time 0.5 to time 7 .  With the second recorder, record Channel 1 from time 7 to time 12 . The second and third programs will be recorded. Note that this recorder will be unable to record other channels from time 6.5 to time 12 .        Sample Input 2 3 4
1 3 2
3 4 4
1 4 3      Sample Output 2 3  There may be a channel where there is no program to record.       Sample Input 3 9 4
56 60 4
33 37 2
89 90 3
32 43 1
67 68 3
49 51 3
31 32 3
70 71 1
11 12 3      Sample Output 3 2

Solution (Python):
if __name__ == '__main__':
    n, cc = map(int, input().split())
    channels = [[] for _ in range(cc)]
    for i in range(n):
        s, t, c = map(int, input().split())
        c -= 1
        channels[c].append((s, t))
    for i in range(cc):
        channels[i].sort()
        merged_program = []
        for program in channels[i]:
            if not merged_program:
                merged_program.append(program)
            elif merged_program[-1][1] == program[0]:
                merged_program[-1] = (merged_program[-1][0], program[1])
            else:
                merged_program.append(program)
        channels[i] = merged_program
    events = []
    for programs in channels:
        for s, t in programs:
            events.append((s * 2 - 1, +1))
            events.append((t * 2, -1))
    events.sort()
    ans = 0
    cnt = 0
    for ti, ty in events:
        cnt += ty
        ans = max(ans, cnt)
    print(ans)

Solution (Python):
N,C = map(int, raw_input().split())
T = [[] for _ in range(C)]
for _ in range(N):
  s,t,c = map(int, raw_input().split())
  T[c-1] += [(s,t)]
for t in T:
  t.sort()
D = [0]*(10**5+1)
for t in T:
  if len(t)>0:
    D[t[0][0]-1] += 1
    for i in range(len(t)-1):
      if t[i][1]<t[i+1][0]:
        D[t[i][1]] -= 1
        D[t[i+1][0]-1] += 1
    D[t[-1][1]] -=1
ans = 0
a = 0
for d in D:
  a += d
  ans = max(ans, a)
print ans

Solution (Python):
import sys

stdin = sys.stdin

ni = lambda: int(ns())
na = lambda: list(map(int, stdin.readline().split()))
ns = lambda: stdin.readline()

n, c = na()
stc = []
for i in range(n):
    stc.append(na())
stc.sort(key=lambda x: (x[2], x[0]))

nstc = []
for i in range(n):
    if len(nstc) > 0 and nstc[-1][2] == stc[i][2] and nstc[-1][1] == stc[i][0]:
        nstc[-1][1] = stc[i][1]
    else:
        nstc.append(stc[i])
n = len(nstc)

h = [0]*200005
for i in range(n):
    h[2*nstc[i][0] - 1] += 1
    h[2*nstc[i][1]] += -1
for i in range(len(h)-1):
    h[i] += h[i-1]
print(max(h))