• <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 閱讀(260) 評論(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 }
            国产高潮国产高潮久久久91| 性高湖久久久久久久久| 亚洲精品无码成人片久久| 国产巨作麻豆欧美亚洲综合久久 | 亚洲国产成人久久综合区| 欧美精品一本久久男人的天堂| 欧美日韩精品久久久免费观看| 狠狠色丁香婷婷综合久久来| 久久精品国产久精国产果冻传媒| 国内精品伊人久久久久影院对白| 久久国产乱子伦免费精品| 久久精品青青草原伊人| 亚洲综合精品香蕉久久网| 久久久久亚洲精品无码蜜桃| 久久国产精品-国产精品| 99久久99久久精品国产片果冻| 午夜精品久久久内射近拍高清| 精品国产乱码久久久久久呢| 久久久久久久尹人综合网亚洲| 久久青青色综合| 国产精品久久久久久久久久免费| 久久毛片免费看一区二区三区| 欧美久久综合性欧美| 午夜福利91久久福利| 2021国内精品久久久久久影院| 午夜天堂精品久久久久| 日本精品久久久久中文字幕| MM131亚洲国产美女久久| 久久久久国产一区二区三区| 亚洲国产另类久久久精品小说| 99久久精品午夜一区二区 | 97久久国产露脸精品国产| 久久偷看各类wc女厕嘘嘘| 久久久久亚洲av毛片大| 久久中文娱乐网| 浪潮AV色综合久久天堂| 人妻丰满AV无码久久不卡| 久久福利片| 污污内射久久一区二区欧美日韩 | 久久精品国产99国产精品| 国内精品九九久久精品|