zoukankan      html  css  js  c++  java
  • [HNOI2004]宠物收养所

    维护一个有序序列,查找小于x的最大值与大于x的最小值。

    这个题的取模操作,深深的坑了。。。

    调了好久,都没发现错误。。

    sum += xx%MOD;这样是不对的!!

    sum = (sum+xx)%MOD;这才是正解。。。。。。

    int find_low(int x) {//小于x的最大值,虚拟结点的v=-INF;
      Node *p = ss.root, *ret = null;
      while ( p != null ) {
        if ( p->v <= x ) ret = p, p = p->ch[1];
        else p = p-> ch[0];
      }
      return ret->v;
    }
    int find_up(int x) {//大于x的最小值,null->v = INF;
      Node *p = ss.root, *ret = null;
      while ( p != null ) {
        if ( p->v >= x ) ret = p, p = p->ch[0];
        else p = p-> ch[1];
      }
      return ret->v;
    }
    void add(int x) {//从小到大插入x, 虚拟结点的v=-INF;
      Node *p = ss.root;
      int k = 0;
      while ( p != null ) {
        p->pushdown();
        if(p->v > x) p = p->ch[0];
        else {
          k += p->ch[0]->s + 1;
          p = p->ch[1];
        }
      }
      Node *left, *right;
      split(ss.root, k, left, right);
      Node *mid = new Node();
      mid->ch[0] = mid->ch[1] = null;                                                             
      mid->s = 1;//很关键
      mid->v = x; //mid->lazy = 0;
    
      ss.root = merge(merge(left, mid), right);
    }
    void del(int x) {//删除x,前提是x一定存在
      int k = 0;//k表示所有比x小的数的个数         
      Node *p = ss.root;                           
      while ( p != null ) {
        //p->pushdown();
        if(p->v >= x) p = p->ch[0];                
        else {
          k += p->ch[0]->s + 1;                    
          p = p->ch[1]; 
        }
      }   
      //printf ( "k=%d
    ", k );                    
      //if(k == 1) return;
      Node *left, *mid, *right, *o;
      split(ss.root, k, left, o);
      split(o, 1, mid, right);
      ss.root = merge(left, right);
      cnt--;
    }
  • 相关阅读:
    泛型接口与NUnit初试
    异步文件IO的应用
    [Andrew McAfee]Enterprise 2.0下的大趋势
    silverlight
    扩展prototype库兼容w3c domajax for firefox
    开张了
    最长平台
    常见C/C++ XML解析器比较
    GIS地图开发
    几种常见 容器 比较和分析 hashmap, map, vector, list ...hash table
  • 原文地址:https://www.cnblogs.com/Accoral/p/3149975.html
Copyright © 2011-2022 走看看