zoukankan      html  css  js  c++  java
  • PKU 2528 Mayor's posters

    第三次写这个题了,这次不再用线段树,因为估计了暴力能过(复杂度的估计不太明显,最坏不超过10^8,实际很可能更低或者大部分情况下更低(O(n)))!

    235ms,超时了几次,猜测是因为memset,所以加了个位优化,AC。

     1 # include <stdio.h>
     2 # include <stdlib.h>
     3 # include <string.h>
     4 
     5 # define id(x) ((x)>>3)
     6 # define of(x) ((x)&0x7)
     7 # define get(x) ((h[id(x)]>>of(x)) & 0x1)
     8 # define set(x) (h[id(x)] |= (0x1 << of(x)))
     9 
    10 # define MAXN 10005
    11 
    12 int n, m, cols;
    13 int l[MAXN], r[MAXN];
    14 int p[MAXN << 2];
    15 short c[MAXN << 2];
    16 char h[(MAXN >> 3) + 5];
    17 
    18 /***************************************************************/
    19 int bins(int *v, int k)
    20 {
    21     int high = m-1, low = 0, mid;
    22     
    23     while (low < high)
    24     {
    25         mid = low + ((high-low)>>1);
    26         if (v[mid] == k) return mid;
    27         else if (v[mid] > k) high = mid - 1;
    28         else low = mid + 1;
    29     }
    30     return low;
    31 }
    32 
    33 int cmp(const void *x, const void *y)
    34 {
    35     return *(int*)x - *(int*)y;
    36 }
    37 
    38 /***************************************************************/
    39 void solve(void)
    40 {
    41     int x, y, i, j, ans;
    42     
    43     cols = 1;
    44     memset(c, 0, sizeof(c[0])*(m>>3));
    45     for (i = 0; i < n; ++i, ++cols)
    46     {
    47         x = bins(p, l[i]), y = bins(p, r[i]);
    48         for (j = x; j <= y; ++j) c[j] = cols;
    49     }
    50     ans = 0;
    51     memset(h, 0, sizeof(char)*((n+8)>>3));
    52     for (i = 0; i < m+5; ++i)
    53     {
    54         if (c[i] && !get(c[i])) set(c[i]), ++ans;
    55     }
    56     printf("%d\n", ans);
    57 }
    58 
    59 int main()
    60 {
    61     int T, i, k;
    62     
    63     scanf("%d", &T);
    64     while (T--)
    65     {
    66         m = 0;
    67         scanf("%d", &n);
    68         for (i = 0; i < n; ++i)
    69         {
    70             scanf("%d%d", &l[i], &r[i]);
    71             p[m++] = l[i], p[m++] = r[i];
    72         }
    73         qsort(p, m, sizeof(p[0]), cmp);
    74         k = m, m = 1;
    75         for (i = 1; i < k; ++i)
    76             if (p[i] == p[m-1]) continue;
    77             else p[m++] = p[i];
    78         k = m;
    79         for (i = 1; i < k; ++i)
    80             if (p[i] != p[i-1]+1) p[m++] = p[i-1]+1;
    81         qsort(p, m, sizeof(p[0]), cmp);
    82         solve();
    83     }
    84     
    85     return 0;
    86 }
  • 相关阅读:
    【总结】我所整理的各种CSS居中
    【转】前端精选文摘:BFC 神奇背后的原理
    【转】CSS深入理解流体特性和BFC特性下多栏自适应布局
    【转】css学习专题-BFC
    【转】关于Block Formatting Context--BFC和IE的hasLayout
    【转】CSS z-index 属性的使用方法和层级树的概念
    IScroll5兼容IE修改
    IE 浏览器各个版本 JavaScript 支持情况一览表
    iOS UITextField输入框
    iOS判断当前设备旋转方向
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2647165.html
Copyright © 2011-2022 走看看