cogs 1682. [HAOI2014]贴海报 WW

★★☆   输入文件: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

所有的数据都是整数。数据之间有一个空格

正解树状数组(线段树???),暴力52分(cogs),AC(luogu):

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cmath>
 5 #include<cstring>
 6 #include<string>
 7  
 8 using namespace std;
 9 const int N=10000010;
10  
11 inline int read()
12 {
13     int x=0,f=1;
14     char c=getchar();
15     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
16     while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
17     return x*f;
18 }
19  
20 int vis[N];
21  
22 int main()
23 {
24     
25     freopen("ha14d.in","r",stdin);
26     freopen("ha14d.out","w",stdout);
27     int n=read();
28     int m=read();
29     for(int i=1;i<=m;i++)
30     {
31         int u=read();
32         int v=read();
33         for(int j=u;j<=v;j++)
34         {
35             vis[j]=i;
36         }
37     }
38     int Answer=0;
39     for(int i=1;i<=m;i++)
40     {
41         bool flag=1;
42         for(int j=1;j<=n&&flag;j++)
43         {
44             if(vis[j]==i)
45             {
46                 Answer++;
47                 flag=0;
48             }
49         }
50     }
51     
52     printf("%d",Answer);
53     
54     return 0;
55 }
原文地址:https://www.cnblogs.com/lyqlyq/p/6910096.html