记录编号 398384 评测结果 AAAAAAAAAAAAAAAAAAAAA
题目名称 [HAOI 2014]贴海报 最终得分 100
用户昵称 GravatarImone NOI2018Au 是否通过 通过
代码语言 C++ 运行时间 0.782 s
提交时间 2017-04-22 10:06:55 内存使用 92.02 MiB
显示代码纯文本
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;

#define MAXN 10000005
#define MAXM 1005

int N, M;

bool vis[MAXM];

int L[MAXN], R[MAXN];
int id = 1, G[2*MAXM][2*MAXM], Len[2*MAXM];

priority_queue<int> Q, Qdel;

int main() {
	freopen("ha14d.in", "rt", stdin);
	freopen("ha14d.out", "wt", stdout);
	
	int i, k, x, y, a, b;
	scanf("%d%d", &N, &M);
	for(i=1;i<=M;i++) {
		scanf("%d%d", &x, &y);
		if(!(a = L[x])) a = (L[x] = id++);
		if(!(b = R[y])) b = (R[y] = id++);
		
		G[ a ][ Len[a]++ ] = i;
		G[ b ][ Len[b]++ ] = i;
	}
	
	for(i=1;i<=N;i++) {
		//set in L
		a = L[i];
		for(k=0;k<Len[a];k++) Q.push(G[a][k]);
		
		while(!Qdel.empty() && !Q.empty() && Q.top() == Qdel.top()) {
			Q.pop(); Qdel.pop();
		}
		
		if(!Q.empty()) vis[Q.top()] = 1;
		
		//get out R
		b = R[i];
		for(k=0;k<Len[b];k++) Qdel.push(G[b][k]);
	}
	
	int Ans = 0;
	for(i=1;i<=M;i++) if(vis[i]) Ans++;
	printf("%d\n", Ans);
}