★★☆ 输入文件:ha14d.in 输出文件:ha14d.out 简单对比
时间限制:1 s
内存限制:256 MB
【题目描述】
Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论。为了统一管理,城市委员会为选民准备了一个张贴海报的electoral墙。
张贴规则如下:
1.electoral墙是一个长度为N个单位的长方形,每个单位记为一个格子;
2.所有张贴的海报的高度必须与electoral墙的高度一致的;
3.每张海报以“A B”表示,即从第A个格子到第B个格子张贴海报;
4.后贴的海报可以覆盖前面已贴的海报或部分海报。
现在请你判断,张贴完所有海报后,在electoral墙上还可以看见多少张海报。
【输入格式】
第一行: N M 分别表示electoral墙的长度和海报个数
接下来M行: Ai Bi 表示每张海报张贴的位置
【输出格式】
输出贴完所有海报后,在electoral墙上还可以看见的海报数。
【样例输入】
100 5
1 4
2 6
8 10
3 4
7 10
【样例输出】
4
【提示】
【约束条件】
1 0<= N <= 10000000 1<=M<=1000 1<= Ai <= Bi <=10000000
所有的数据都是整数。数据之间有一个空格
上来看了一眼立马用10min打出了暴力,打完T3的暴力之后回来看了一下这个题感觉是线段树的裸体
然后用15min写出了线段树
但是!!!
线段树!!
居然!!
比!!
暴力!!
慢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
而且!!
还!!
爆内存!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
这就比较尴尬了,望着对拍程序上每次都是暴力先跑完然后线段树等一秒再出结果的场景,我还能说什么、、
难道是因为我写的线段树太丑了???
=.=
暴力思路:模拟张贴每一个海报
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 using namespace std;
6 const int MAXN=10000001;
7 int n,m,x,y;
8 int read(int & n)
9 {
10 char c='/';int x=0,flag=0;
11 while(c<'0'||c>'9')
12 {c=getchar();
13 if(c=='-')flag=1;}
14 while(c>='0'&&c<='9')
15 {x=x*10+c-48;c=getchar();}
16 if(flag)n=-x;
17 else n=x;
18 return n;
19 }
20 int a[MAXN];
21 int vis[MAXN];
22 int now=1;
23 int ans=0;
24 int main()
25 {
26 freopen("a.in","r",stdin);
27 freopen("b.out","w",stdout);
28 read(n);read(m);
29 for(int i=1;i<=m;i++)
30 {
31 read(x);read(y);
32 if(x>y)swap(x,y);
33 for(int j=x;j<=y;j++)
34 a[j]=i;
35 }
36 for(int i=1;i<=n;i++)
37 {
38 if(vis[a[i]]==0&&a[i]!=0)
39 {
40 ans++;
41 vis[a[i]]=1;
42 }
43 }
44 printf("%d",ans);
45 return 0;
46 }