zoukankan      html  css  js  c++  java
  • 楼房重建 HYSBZ

    楼房重建 HYSBZ - 2957

    第一次写分块, 写了之后觉得真的是暴力的一比。

    题解:先讲n分成 sqrt(n)块,记得补上末尾的, 然后就是对于每一次更新操作, 都重新的讲这个块里面的有效楼放入vector里面, 然后再从头开始upper_bound查找就好了。

    还是再说一句, 真的暴力。

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
     4 #define LL long long
     5 #define ULL unsigned LL
     6 #define fi first
     7 #define se second
     8 #define pb push_back
     9 #define lson l,m,rt<<1
    10 #define rson m+1,r,rt<<1|1
    11 #define max3(a,b,c) max(a,max(b,c))
    12 #define min3(a,b,c) min(a,min(b,c))
    13 typedef pair<int,int> pll;
    14 const int INF = 0x3f3f3f3f;
    15 const LL mod =  (int)1e9+7;
    16 const int N = 2e5 + 100;
    17 double h[N];
    18 int belong[N];
    19 int tot, n, m;
    20 struct Node{
    21     int l, r;
    22     vector<double> vc;
    23 }blo[N];
    24 void Build(){
    25     m = sqrt(n);
    26     tot = n / m;
    27     if(n%m) tot++;
    28     for(int i = 1; i <= n; i++){
    29         belong[i] = (i-1)/m + 1;
    30     }
    31     for(int i = 1; i <= tot; i++){
    32         blo[i].l = (i-1)*m + 1;
    33         blo[i].r = i*m;
    34     }
    35     blo[tot].r = n;
    36 }
    37 int solve(int k, int H){
    38     double hh = 1.0 * H / k;
    39     int to = belong[k];
    40     h[k] = hh;
    41     blo[to].vc.clear();
    42     double mx = 0.0;
    43     for(int i = blo[to].l; i <= blo[to].r; i++){
    44         if(mx < h[i]){
    45             mx = h[i];
    46             blo[to].vc.pb(h[i]);
    47         }
    48     }
    49     mx = 0.0;
    50     int ans = 0;
    51     for(int i = 1; i <= tot; i++){
    52         if(blo[i].vc.size() == 0) continue;
    53         ans += blo[i].vc.end() - upper_bound(blo[i].vc.begin(), blo[i].vc.end(), mx);
    54         mx = max(mx, *blo[i].vc.rbegin());
    55     }
    56     return ans;
    57 }
    58 int main(){
    59     int q;
    60     scanf("%d%d", &n, &q);
    61     Build();
    62     while(q--){
    63         int k, H;
    64         scanf("%d%d", &k, &H);
    65         printf("%d
    ", solve(k,H));
    66     }
    67     return 0;
    68 }
    楼房重建
  • 相关阅读:
    Django ORM操作及进阶
    Django ORM字段和字段参数
    Django视图系统
    Django路由系统
    Django模板语言
    Django项目创建及相关配置,在pycharm终端打印SQL语句,在Python脚本中调用Django环境
    SQLALchemy之ORM操作
    SQLALchemy之介绍,基本使用
    SQLAlchemy创建表和删除表
    线程的通信与协作:sleep、wait、notify、yield、join关系与区别
  • 原文地址:https://www.cnblogs.com/MingSD/p/9100127.html
Copyright © 2011-2022 走看看