zoukankan      html  css  js  c++  java
  • COJ 0986 WZJ的数据结构(负十四) 区间动态k大

    题解:哈哈哈我过了!!!主席树+树状数组写起来还真是hentai啊。。。

    在这里必须分享我的一个沙茶错!!!看这段代码:

    void get(int x,int d){
        if(!d)for(lt[ltot=1]=root[x];x;x-=x&-x)if(c[x])lt[++ltot]=c[x];
        else  for(rt[rtot=1]=root[x];x;x-=x&-x)if(c[x])rt[++rtot]=c[x];return;
    }

    似乎挺正常是吧?而且缩进也很优美对不对!!!

    可是!!!!!!!!窝萌发现它是错的!!!!!!!!!!

    因为下面那个else跟上面的if配对了!!!!!!所以这段程序其实是这样的:

    void get(int x,int d){
        if(!d)for(lt[ltot=1]=root[x];x;x-=x&-x){
            if(c[x])lt[++ltot]=c[x];
            else{
                for(rt[rtot=1]=root[x];x;x-=x&-x)
                if(c[x])rt[++rtot]=c[x];
            }
        }return;
    }

    我要疯了!!!!!!!!!!!!!!!!!!!

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<cstring>
     7 #define PAU putchar(' ')
     8 #define ENT putchar('
    ')
     9 #define CH for(int d=0;d<2;d++)if(ch[d])
    10 #define lson ls(x),y->ch[0],L,M
    11 #define rson rs(x),y->ch[1],M+1,R
    12 using namespace std;
    13 const int maxn=100000+10,maxnode=20000000+10,inf=-1u>>1,vl=1,vr=100000;
    14 struct node{
    15     node*ch[2];int siz;node(){siz=0;}
    16 }pol[maxnode],*nodecnt=pol,*root[maxn],*c[maxn],*lt[maxn],*rt[maxn];int ltot,rtot;
    17 node*ls(node*x){return x?x->ch[0]:x;}
    18 node*rs(node*x){return x?x->ch[1]:x;}
    19 int sz(node*x){return x?x->siz:0;}
    20 int n,m,A[maxn],cv;
    21 void build(int v,int pos,node*x,node*&y,int L=vl,int R=vr){
    22     y=nodecnt++;y->siz=sz(x)+v;if(L==R)return;int M=L+R>>1;
    23     if(pos<=M)y->ch[1]=rs(x),build(v,pos,lson);else y->ch[0]=ls(x),build(v,pos,rson);return;
    24 }
    25 void update(int x,int v){
    26     for(int w=x;w<=n;w+=w&-w)build(-1,A[x],c[w],c[w]);
    27     for(int w=x;w<=n;w+=w&-w)build(1,A[x]=v,c[w],c[w]);return;
    28 }
    29 void get(int x,int d){
    30     if(!d){for(lt[ltot=1]=root[x];x;x-=x&-x)if(c[x])lt[++ltot]=c[x];}
    31     else  {for(rt[rtot=1]=root[x];x;x-=x&-x)if(c[x])rt[++rtot]=c[x];}return;
    32 }
    33 inline int read(){
    34     int x=0,sig=1;char ch=getchar();
    35     for(;!isdigit(ch);ch=getchar())if(ch=='-')sig=0;
    36     for(;isdigit(ch);ch=getchar())x=10*x+ch-'0';
    37     return sig?x:-x;
    38 }
    39 inline void write(int x){
    40     if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x;
    41     int len=0,buf[15];while(x)buf[len++]=x%10,x/=10;
    42     for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return;
    43 }
    44 void init(){
    45     n=read();m=read();
    46     for(int i=1;i<=n;i++)build(1,A[i]=read(),root[i-1],root[i]);
    47     return;
    48 }
    49 void work(){
    50     int x,y,v;
    51     while(m--){
    52         if(!read())x=read(),v=read(),update(x,v);
    53         else{x=read();y=read();v=read();
    54             get(x-1,0);get(y,1);int L=vl,R=vr,M,kth;
    55             while(L<R){M=L+R>>1;kth=0;//printf("%d %d %d %d
    ",L,R,ltot,rtot);
    56                 for(int i=1;i<=ltot;i++)kth-=sz(ls(lt[i]));
    57                 for(int i=1;i<=rtot;i++)kth+=sz(ls(rt[i]));
    58                 if(kth>=v){R=M;
    59                     for(int i=1;i<=ltot;i++)lt[i]=ls(lt[i]);
    60                     for(int i=1;i<=rtot;i++)rt[i]=ls(rt[i]);
    61                 }else{L=M+1;v-=kth;
    62                     for(int i=1;i<=ltot;i++)lt[i]=rs(lt[i]);
    63                     for(int i=1;i<=rtot;i++)rt[i]=rs(rt[i]);
    64                 }
    65             }write(L);ENT;
    66         }
    67     }
    68     return;
    69 }
    70 void print(){
    71     return;
    72 }
    73 int main(){init();work();print();return 0;}
  • 相关阅读:
    1.4.2.3. SETUP(Core Data 应用程序实践指南)
    1.4.2.2. PATHS(Core Data 应用程序实践指南)
    1.4.2.1. FILES(Core Data 应用程序实践指南)
    1.4.2. 实现 Core Data Helper 类(Core Data 应用程序实践指南)
    1.4.1. Core Data Helper 简介(Core Data 应用程序实践指南)
    1.4. 为现有的应用程序添加 Core Data 支持(Core Data 应用程序实践指南)
    1.3.2. App Icon 和 Launch Image(Core Data 应用程序实践指南)
    1.3.1. 新建Xcode项目并设置故事板(Core Data 应用程序实践指南)
    php验证邮箱是否合法
    如何使js函数异步执行
  • 原文地址:https://www.cnblogs.com/chxer/p/4670137.html
Copyright © 2011-2022 走看看