比赛 平凡的题目 评测结果 WAWWWWWTWA
题目名称 平凡的题面 最终得分 20
用户昵称 Skyo 运行时间 1.133 s
代码语言 C++ 内存使用 1.05 MiB
提交时间 2015-11-03 09:30:22
显示代码纯文本
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#define L first
#define R second
using namespace std;
typedef pair<int,int> PII;

int n, m, ans, a[100005], nx[100005]; 
bool app[100005];
priority_queue <PII, vector<PII>, greater<PII> > q;

void get(int &x)
{
	char c = getchar(); x = 0;
	while(c < '0' || c > '9') c = getchar();
	while(c <= '9' && c >= '0') x = x*10+c-48, c = getchar();
}

int main()
{
	freopen("bg.in", "r", stdin);
	freopen("bg.out", "w", stdout);
	
	scanf("%d %d", &n, &m);
	for(int i = 1; i <= n; i++) get(a[i]);
	for(int i = 1; i <= m; i++) 
	{
		PII p; get(p.L); get(p.R);
		q.push(p);
		app[p.L] = 1;
	}
	
	int last = 0;
	for(int i = 1; i <= 100000; i++) 
		if(app[i]) nx[last] = i, last = i;
	
	sort(a+1, a+n+1);
	int pos = 1; last = nx[0];
	while(pos <= n && !q.empty())
	{
		if(a[pos] >= nx[last]) 
		{
			while(q.top().L == last) 
			{
				PII t = q.top(); q.pop();
				t.L = nx[last]; q.push(t);
			}
			last = nx[last];
		}
		
		while(!q.empty() && (a[pos] < q.top().L || a[pos] > q.top().R)) q.pop();
		if(q.empty()) break;
		if(q.top().L <= a[pos] && q.top().R >= a[pos]) ans++, q.pop();
		pos++;
	}
	
	printf("%d", ans);
	return 0;
}