Codeforces Beta Round #95 (Div. 2)
来源:互联网 发布:编程对电脑要求 编辑:程序博客网 时间:2024/06/12 14:45
#include<iostream>using namespace std;#define N 300000struct Point { int r, c; } p[N];int high[N], low[N], Left[N], Right[N], dia1[N][2], dia2[N][2];int main(){ int n, m; cin >> n >> m; for ( int i = 1; i < N; i++ ) { high[i] = -1; low[i] = N; Left[i] = N; Right[i] = -1; dia1[i][0] = N; dia1[i][1] = -1; dia2[i][0] = N; dia2[i][1] = -1; } for ( int i = 1; i <= m; i++ ) { cin >> p[i].r >> p[i].c; high[p[i].c] = max ( high[p[i].c], p[i].r ); low[p[i].c] = min ( low[p[i].c], p[i].r ); Left[p[i].r] = min ( Left[p[i].r], p[i].c ); Right[p[i].r] = max ( Right[p[i].r], p[i].c ); dia1[p[i].r+p[i].c][0] = min ( dia1[p[i].r+p[i].c][0], p[i].c ); dia1[p[i].r+p[i].c][1] = max ( dia1[p[i].r+p[i].c][1], p[i].c ); dia2[p[i].r-p[i].c+n][0] = min ( dia2[p[i].r-p[i].c+n][0], p[i].c ); dia2[p[i].r-p[i].c+n][1] = max ( dia2[p[i].r-p[i].c+n][1], p[i].c ); } int attak[10] = {0}; for ( int i = 1; i <= m; i++ ) { int cnt = 0; if ( p[i].r < high[p[i].c] ) cnt++; if ( p[i].r > low[p[i].c] ) cnt++; if ( p[i].c < Right[p[i].r] ) cnt++; if ( p[i].c > Left[p[i].r] ) cnt++; if ( p[i].c > dia1[p[i].r+p[i].c][0] ) cnt++; if ( p[i].c < dia1[p[i].r+p[i].c][1] ) cnt++; if ( p[i].c > dia2[p[i].r-p[i].c+n][0] ) cnt++; if ( p[i].c < dia2[p[i].r-p[i].c+n][1] ) cnt++; attak[cnt]++; } for ( int i = 0; i <= 7; i++ ) cout << attak[i] << ' '; cout << attak[8] << endl;}