Problem:


Score : 500 points

Problem Statement

We have a two-dimensional grid with H \times W squares. There are M targets to destroy in this grid - the position of the i-th target is \left(h_i, w_i \right).

Takahashi will choose one square in this grid, place a bomb there, and ignite it. The bomb will destroy all targets that are in the row or the column where the bomb is placed. It is possible to place the bomb at a square with a target.

Takahashi is trying to maximize the number of targets to destroy. Find the maximum number of targets that can be destroyed.

Constraints

All values in input are integers.

1 \leq H, W \leq 3 \times 10^5

1 \leq M \leq \min\left(H\times W, 3 \times 10^5\right)

1 \leq h_i \leq H

1 \leq w_i \leq W

\left(h_i, w_i\right) \neq \left(h_j, w_j\right) \left(i \neq j\right)

Input

Input is given from Standard Input in the following format:

H W M
h_1 w_1
\vdots
h_M w_M

Output

Print the answer.

Sample Input 1

2 3 3
2 2
1 1
1 3

Sample Output 1

3

We can destroy all the targets by placing the bomb at \left(1, 2\right).

Sample Input 2

3 3 4
3 3
3 1
1 1
1 2

Sample Output 2

3

Sample Input 3

5 5 10
2 5
4 3
2 3
5 5
2 2
5 4
5 3
5 1
3 5
1 4

Sample Output 3

6



Sample input:
2 3 3
2 2
1 1
1 3


Sample output:
3

Submission status: Accepted

Solution code:
# compiled by pythran
"""
#pythran export main2()
import numpy as np
i4 = np.int32
i8 = np.int64


def solve(h, w, l, H, W, M):
    h_max = []
    w_max = []
    hm = h.max()
    wm = w.max()
    for i in range(H + 1):
        if h[i] == hm:
            h_max.append(i)
    for i in range(W + 1):
        if w[i] == wm:
            w_max.append(i)

    if len(h_max) * len(w_max) > M:
        return hm + wm

    for hj in h_max:
        for wj in w_max:
            if not wj in l[hj]:
                return hm + wm
    return hm + wm - 1


def main(in_file):
    stdin = open(in_file)
    H, W, M = [int(x) for x in stdin.readline().split()]
    h = np.zeros(H + 1, i8)
    w = np.zeros(W + 1, i8)
    l = [set() for _ in range(H + 1)]
    for _ in range(M):
        hi, wi = [int(x) for x in stdin.readline().split()]
        h[hi] += 1
        w[wi] += 1
        l[hi].add(wi)
    ans = solve(h, w, l, H, W, M)
    print(ans)


def main2():
    main('/dev/stdin')




"""
import os, sys
p = os.path.dirname(__file__)
pymain = os.path.join(p, "a.out")
if len(sys.argv) == 1:
    import subprocess
    if p == "":
        pymain = "./" + pymain
    subprocess.call(pymain)
else:
    import gzip, base64, stat
    gz = b'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'
    bin = gzip.decompress(base64.b64decode(gz))
    with open(pymain, "wb") as f:
        f.write(bin)
    os.chmod(pymain, 0o775)

Submission status: Accepted

Solution code:
class SegmentTree:
    def __init__(self, init_val, segfunc, ide_ele):
        n = len(init_val)
        self.segfunc = segfunc
        self.ide_ele = ide_ele
        self.num = 1 << (n - 1).bit_length()
        self.tree = [ide_ele] * 2 * self.num
        # 配列の値を葉にセット
        for i in range(n):
            self.tree[self.num + i] = init_val[i]
        # 構築していく
        for i in range(self.num - 1, 0, -1):
            self.tree[i] = self.segfunc(self.tree[2 * i], self.tree[2 * i + 1])

    def update(self, k, x):
        k += self.num
        self.tree[k] = x
        while k > 1:
            self.tree[k >> 1] = self.segfunc(self.tree[k], self.tree[k ^ 1])
            k >>= 1

    def query(self, l, r):
        res = self.ide_ele

        l += self.num
        r += self.num
        while l < r:
            if l & 1:
                res = self.segfunc(res, self.tree[l])
                l += 1
            if r & 1:
                res = self.segfunc(res, self.tree[r - 1])
            l >>= 1
            r >>= 1
        return res

import sys,random

input=sys.stdin.readline

H,W,M=map(int,input().split())
bomb=[[] for i in range(H)]
row=[0 for i in range(H)]
column=[0 for j in range(W)]

for _ in range(M):
    h,w=map(int,input().split())
    #h,w=random.randint(1,H),random.randint(1,W)
    row[h-1]+=1
    column[w-1]+=1
    bomb[h-1].append(w-1)


for i in range(H):
    bomb[i].sort()

Seg=SegmentTree(column,segfunc=max,ide_ele=0)

ans=0
for i in range(H):
    for j in range(len(bomb[i])-1):
        L,R=bomb[i][j],bomb[i][j+1]
        tmp=row[i]+max(column[L],column[R])-1
        ans=max(ans,tmp)
        L+=1
        if L==R:
            continue
        tmp=row[i]+Seg.query(L,R)
        ans=max(ans,tmp)
    if bomb[i] and bomb[i][0]!=0:
        L,R=0,bomb[i][0]
        tmp=row[i]+Seg.query(L,R)
        ans=max(ans,tmp)
    if bomb[i] and bomb[i][-1]!=W-1:
        L,R=bomb[i][-1]+1,W
        tmp=row[i]+Seg.query(L,R)
        ans=max(ans,tmp)
    if not bomb[i]:
        tmp=row[i]+Seg.query(0,W)
        ans=max(ans,tmp)
    else:
        tmp=row[i]+column[bomb[i][0]]-1
        ans=max(ans,tmp)

print(ans)

Submission status: Accepted

Solution code:

import sys
from collections import defaultdict

H, W, M = map(int, input().split())
X = [list(map(int, input().split())) for _ in range(M)]

ctr_h = defaultdict(int)
ctr_w = defaultdict(int)
appeared = set()

for h, w in X:
    ctr_h[h] += 1
    ctr_w[w] += 1
    appeared.add(h * W + w)

val_h = sorted(ctr_h.items(), key=lambda x: -x[1])
val_w = sorted(ctr_w.items(), key=lambda x: -x[1])

max_h = val_h[0][1]
max_w = val_w[0][1]

val_h = [i for i, v in val_h if v == max_h]
val_w = [i for i, v in val_w if v == max_w]

if len(val_h) * len(val_w) > M:
    print(max_h + max_w)
    sys.exit(0)

for h in val_h:
    for w in val_w:
        if h * W + w not in appeared:
            print(max_h + max_w)
            sys.exit(0)
else:
    print(max_h + max_w - 1)

Submission status: Accepted

Solution code:
h,w,m = map(int, input().split())
row = [0]*(h+1)
rn = [[] for _ in range(h+1)]
col = [0]*(w+1)
cn = [[] for _ in range(w+1)]
data = []
for _ in range(m):
  hd,wd = map(int, input().split())
  row[hd] += 1
  rn[hd].append(wd)
  col[wd] += 1
  cn[wd].append(hd)

cm = max(col)
rm = max(row)
ri = [x for x,y in enumerate(row) if y == rm]
ci = [x for x,y in enumerate(col) if y == cm]
for r in ri:
  rs = set(rn[r])
  for c in ci:
    if c not in rs:
      ans = cm+rm
      print(ans)
      exit()
ans = cm+rm-1
print(ans)

Submission status: Accepted

Solution code:
import sys

h, w, m = map(int, input().split())

h_bomb = [0 for _ in range(h)]
w_bomb = [0 for _ in range(w)]

bomb_xy = {}
for ij in range(m):
    y, x = map(int, input().split())
    h_bomb[y-1] += 1
    w_bomb[x-1] += 1
    bomb_xy[str(y-1)+str(x-1)] = 1

h_max = max(h_bomb)
h_max_index = [i for i, y in enumerate(h_bomb) if y == h_max]
w_max = max(w_bomb)
w_max_index = [j for j, x in enumerate(w_bomb) if x == w_max]

ans = 0
# print("ans:", ans)
for j in h_max_index:
    for i in w_max_index:
        if str(j)+str(i) in bomb_xy:
            ans = h_bomb[j] + w_bomb[i] - 1
        else:
            print(h_bomb[j] + w_bomb[i])
            sys.exit()

print(ans)

Submission status: Accepted

Solution code:
import sys
h,w,m=map(int,input().split())
bomb_h = [0]*h
bomb_w = [0]*w
place = list()
#O(m)
for _ in range(m):
  x,y=map(int,input().split())
  bomb_h[x-1]+=1
  bomb_w[y-1]+=1
  place.append([x-1,y-1])
x_cand = list()
x_max = 0
#O(H)
for x in range(h):
  if x_max < bomb_h[x]:
    x_cand = [x]
    x_max = bomb_h[x]
  elif x_max == bomb_h[x]:
    x_cand.append(x)
y_cand = list()
y_max = 0
#O(W)
for y in range(w):
  if y_max < bomb_w[y]:
    y_cand = [y]
    y_max = bomb_w[y]
  elif y_max == bomb_w[y]:
    y_cand.append(y)
ans = x_max+y_max
# ここまで10^6
cnt = 0
#O(M)
for p in place:
  if bomb_h[p[0]]== x_max and bomb_w[p[1]]==y_max:
    cnt += 1
if len(x_cand)*len(y_cand) > cnt:
  print(ans)
else:
  print(ans-1)

Submission status: Accepted

Solution code:
from operator import itemgetter

h, w, m = (int(x) for x in input().split())
H = [0] * h
W = [0] * w
HW = []
for _ in range(m):
    h_, w_ = (int(x) - 1 for x in input().split())
    HW.append((h_, w_))
    H[h_] += 1
    W[w_] += 1
hmax = max(H)
wmax = max(W)
hindex = set()
windex = set()

HW.sort(key=itemgetter(0, 1))
for y in range(h):
    if H[y] == hmax:
        hindex.add(y)
for x in range(w):
    if W[x] == wmax:
        windex.add(x)

count = 0
for h, w in HW:
    if h in hindex and w in windex:
        count += 1

if count == len(hindex)*len(windex):
    ans = hmax + wmax - 1
else:
    ans = hmax + wmax

print(ans)