• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            superman

            聚精會神搞建設 一心一意謀發展
            posts - 190, comments - 17, trackbacks - 0, articles - 0
               :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            URAL 1037 - Memory management

            Posted on 2008-09-22 23:19 superman 閱讀(266) 評論(0)  編輯 收藏 引用 所屬分類: URAL
              1 /* Accepted  0.312 557 KB */
              2 #include <iostream>
              3 
              4 using namespace std;
              5 
              6 const int maxn = 30000;
              7 
              8 template <class T>
              9 class Heap
             10 {
             11 private:
             12     T A[maxn + 1]; int len;
             13     inline int Parent(int i) { return i / 2; }
             14     inline int Lchild(int i) { return i * 2; }
             15     inline int Rchild(int i) { return i * 2 + 1; }
             16     
             17 public:
             18     Heap(const T * x, const int & n)
             19     {
             20         len = n;
             21         for(int i = 1; i <= n; i++)
             22             A[i] = x[i];
             23         for(int i = n / 2; i >= 1; i--)
             24             modify(i);
             25     }
             26     Heap(int s, int t)
             27     {
             28         len = t - s + 1;
             29         for(int i = 1; i <= len; i++)
             30             A[i] = s + i - 1;
             31     }
             32     Heap() { len = 0; }
             33     void modify(int i)
             34     {
             35         int min = i;
             36         int l = Lchild(i);
             37         int r = Rchild(i);
             38         if(l <= len && A[l] < A[min]) min = l;
             39         if(r <= len && A[r] < A[min]) min = r;
             40         if(i != min)
             41         {
             42             swap(A[i], A[min]);
             43             modify(min);
             44         }
             45     }
             46     bool empty() { return len == 0; }
             47     T & getmin() { return A[1]; }
             48     void push(const T & item)
             49     {
             50         A[len + 1= item;
             51         int i = len + 1;
             52         while(i > 1 && A[i] < A[Parent(i)])
             53         {
             54             swap(A[i], A[Parent(i)]);
             55             i = Parent(i);
             56         }
             57         len++;
             58     }
             59     void pop()
             60     {
             61         swap(A[1], A[len]);
             62         len--;
             63         modify(1);
             64     }
             65     bool update(intint);
             66 }   ;
             67 
             68 template <class T>
             69 bool Heap<T>::update(int num, int latest)
             70 {
             71     for(int i = 1; i <= len; i++)
             72         if(A[i].num == num)
             73         {
             74             A[i].latest = latest;
             75             modify(i);
             76             
             77             return true;
             78         }
             79     return false;
             80 }
             81 
             82 struct rec
             83 {
             84     int num, latest;
             85     
             86     bool operator < (const rec & x) const
             87     {
             88         return latest < x.latest;
             89     }
             90 }   ;
             91 
             92 //=============================================
             93 int currentTime, accessNum;
             94 Heap <int> X(130000);
             95 Heap <rec> Y;
             96 
             97 void allocate()
             98 {
             99     while(Y.empty() == false && currentTime - Y.getmin().latest >= 600)
            100     {
            101         X.push(Y.getmin().num);
            102         Y.pop();
            103     }
            104     
            105     cout << X.getmin() << endl;
            106     rec r = { X.getmin(), currentTime };
            107     Y.push(r);
            108     X.pop();
            109 }
            110 
            111 void access()
            112 {
            113     while(Y.empty() == false && currentTime - Y.getmin().latest >= 600)
            114     {
            115         X.push(Y.getmin().num);
            116         Y.pop();
            117     }
            118     
            119     cout << (Y.update(accessNum, currentTime) ? '+' : '-'<< endl;
            120 }
            121 
            122 int main()
            123 {
            124     char c;
            125     while(true)
            126     {
            127         if(scanf("%d %c"&currentTime, &c) == EOF)
            128             break;
            129         
            130         if(c == '+')
            131             allocate();
            132         else
            133         {
            134             scanf("%d"&accessNum);
            135             access();
            136         }
            137     }
            138     
            139     return 0;
            140 }
            久久久久久久波多野结衣高潮 | 国产激情久久久久影院小草 | 国产精品热久久毛片| 精品久久久久久中文字幕人妻最新 | 久久成人影院精品777| 99久久中文字幕| 青青热久久国产久精品 | 欧美国产成人久久精品| 久久91精品综合国产首页| 国产精品热久久无码av| 久久精品无码av| 久久婷婷成人综合色综合| 99久久综合狠狠综合久久止| 久久这里的只有是精品23| 99久久国产精品免费一区二区| 亚洲精品无码专区久久久| 国产精品一久久香蕉国产线看观看| 国产午夜久久影院| 久久这里都是精品| 国产亚洲精午夜久久久久久| 91精品国产高清久久久久久国产嫩草| 久久综合九色综合久99| 亚洲AV日韩精品久久久久| 99久久精品国产一区二区三区 | 精品久久8x国产免费观看| 国产精品无码久久四虎| 久久伊人五月丁香狠狠色| 久久国产精品无码一区二区三区| 99久久国产免费福利| 精品国产青草久久久久福利| 久久久久人妻一区精品色| 性高湖久久久久久久久AAAAA| 久久偷看各类wc女厕嘘嘘| 午夜福利91久久福利| 狠狠色丁香久久综合婷婷| 中文字幕热久久久久久久| 久久久久国产| 亚洲国产成人久久精品99| 国产成人精品久久亚洲| 无码精品久久久久久人妻中字 | 欧美大战日韩91综合一区婷婷久久青草 |