zoukankan      html  css  js  c++  java
  • ZROI #88

    传送门

    分析

    我们考虑把每个A[i]考虑为山峰的高度,每次的B考虑为海平面

    于是我们知道对于A[i]和A[i-1],如果A[i-1]<A[i]则在A[i-1]<B<=A[i]时会使陆地总数加一

    于是树状数组维护即可

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<queue>
    #include<ctime>
    #include<vector>
    #include<set>
    #include<map>
    #include<stack>
    using namespace std;
    #define N cnt
    int D[401000],a[200100],opt[200100],b[200100],c[200100],d[200100];
    int id[400100],cnt;
    int lb(int x){return x&(-x);}
    void add(int x,int k){while(x<=N)D[x]+=k,x+=lb(x);}
    void update(int le,int ri,int k){add(le,k),add(ri+1,-k);}
    int q(int x){int res=0;while(x){res+=D[x];x-=lb(x);}return res;}
    int wh(int x){return lower_bound(id+1,id+cnt+1,x)-id;}
    int main(){
        int n,m,i,j,k;
        scanf("%d%d",&n,&m);
        for(i=1;i<=n;i++)scanf("%d",&a[i]),id[++cnt]=a[i];
        for(i=1;i<=m;i++){
          scanf("%d",&opt[i]);
          if(opt[i]==1)scanf("%d",&b[i]),id[++cnt]=b[i];
            else scanf("%d%d",&c[i],&d[i]),id[++cnt]=d[i];
        }
        sort(id+1,id+cnt+1);
        cnt=unique(id+1,id+cnt+1)-id-1;
        for(i=1;i<=n;i++)
          if(a[i]>a[i-1])
            update(wh(a[i-1])+1,wh(a[i]),1);
        for(i=1;i<=m;i++){
          if(opt[i]==1)printf("%d
    ",q(wh(b[i])));
            else {
              if(a[c[i]]<a[c[i]+1])update(wh(a[c[i]])+1,wh(a[c[i]+1]),-1);
              if(a[c[i]-1]<a[c[i]])update(wh(a[c[i]-1])+1,wh(a[c[i]]),-1);
              a[c[i]]=d[i];
              if(a[c[i]]<a[c[i]+1])update(wh(a[c[i]])+1,wh(a[c[i]+1]),1);
              if(a[c[i]-1]<a[c[i]])update(wh(a[c[i]-1])+1,wh(a[c[i]]),1);
            }
        }
        return 0;
    }
  • 相关阅读:
    windows下vagrant使用及工作环境配置
    使用docker搭建lnmp环境
    Docker常用命令
    [docker] 管理docker容器中的数据
    python初始化父类错误
    Linux--
    用少于2MB内存存下5百万个介于0到1千万之间的整数
    k路归并:数组、链表
    剑指offer新思路
    阿里电话面试
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/9908810.html
Copyright © 2011-2022 走看看