zoukankan      html  css  js  c++  java
  • 51Nod 1276 岛屿的数量

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <algorithm>
     6 using namespace std;
     7 
     8 const int MAXN = 5e4+5;
     9 struct node
    10 {
    11     int pos, val;
    12 };
    13 node a[MAXN], q[MAXN];
    14 
    15 bool cmp(node a, node b)
    16 {
    17     return a.val < b.val;
    18 }
    19 
    20 bool vis[MAXN];
    21 int ans[MAXN];
    22 
    23 int main()
    24 {
    25     int N, Q;
    26     while(~scanf("%d%d",&N,&Q))
    27     {
    28         memset(vis, 0, sizeof(vis));    //没被淹没
    29         for(int i=0; i<N; i++)
    30         {
    31             scanf("%d",&a[i].val);
    32             a[i].pos = i;
    33         }
    34         for(int i=0; i<Q; i++)
    35         {
    36             scanf("%d",&q[i].val);
    37             q[i].pos = i;
    38         }
    39         sort(a, a+N, cmp);
    40         sort(q, q+Q, cmp);
    41         int sum = 1, j = 0 ;
    42         for(int i=0; i<Q; i++)
    43         {
    44             while(a[j].val <= q[i].val && j<N)
    45             {
    46                 //判断是不是第一个点
    47                 if(a[j].pos == 0)
    48                 {
    49                     if(vis[1])      //被淹没
    50                         sum--;
    51                 }
    52                 //判断是不是最后一个点
    53                 else if(a[j].pos == N-1)
    54                 {
    55                     if(vis[N-2])
    56                         sum--;
    57                 }
    58                 else
    59                 {
    60                     if(vis[a[j].pos-1] && vis[a[j].pos+1])//山峰
    61                         sum--;
    62                     else if(!vis[a[j].pos-1] && !vis[a[j].pos+1])//山谷
    63                         sum++;
    64                 }
    65                 vis[a[j].pos] = 1;      //标记被淹没
    66                 j++;
    67             }
    68             ans[q[i].pos] = sum;
    69         }
    70         for(int i=0; i<Q; i++)
    71             printf("%d
    ",ans[i]);
    72     }
    73     return 0;
    74 }
  • 相关阅读:
    iframe和href中target属性的应用
    跨页面实现多选
    微软EPG老大发给员工的mail
    WebSerivce[连载]
    测试MSSQL保留字
    检正email的格式
    正则常用表达式
    企业库DAAB基本用法
    为什么覆写了Equals,还要覆写GetHashCode呢
    深入熟悉C# (待续)
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/8996082.html
Copyright © 2011-2022 走看看