日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ 3481 Double Queue

發布時間:2025/3/20 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 3481 Double Queue 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

POJ_3481

??? 為了練一下昨天剛學的SBT,所以就用SBT寫了,但實際上這個題目可以通過維護一個最大堆和一個最小堆就能實現所有操作。

#include<stdio.h>
#include<string.h>
#define MAXD 1000010
int T, node, key[MAXD], client[MAXD], left[MAXD], right[MAXD], size[MAXD];
void left_rotate(int &T)
{
int k = right[T];
right[T] = left[k];
left[k] = T;
size[k] = size[T];
size[T] = size[left[T]] + size[right[T]] + 1;
T = k;
}
void right_rotate(int &T)
{
int k = left[T];
left[T] = right[k];
right[k] = T;
size[k] = size[T];
size[T] = size[left[T]] + size[right[T]] + 1;
T = k;
}
void maintain(int &T, int flag)
{
if(flag == 0)
{
if(size[left[left[T]]] > size[right[T]])
right_rotate(T);
else if(size[right[left[T]]] > size[right[T]])
left_rotate(left[T]), right_rotate(T);
else
return ;
}
else
{
if(size[right[right[T]]] > size[left[T]])
left_rotate(T);
else if(size[left[right[T]]] > size[left[T]])
right_rotate(right[T]), left_rotate(T);
else
return ;

}
maintain(left[T], 0);
maintain(right[T], 1);
maintain(T, 0);
maintain(T, 1);
}
void add(int &T, int c, int v)
{
T = ++ node;
size[T] = 1;
client[T] = c;
key[T] = v;
left[T] = right[T] = 0;
}
void Insert(int &T, int c, int v)
{
if(T == 0)
{
add(T, c, v);
return ;
}
++ size[T];
if(v < key[T])
Insert(left[T], c, v);
else
Insert(right[T], c, v);
maintain(T, v >= key[T]);
}
int Delete(int &T, int v)
{
if(v == key[T] || (v < key[T] && left[T] == 0) ||(v > key[T] && right[T] == 0))
{
int k = key[T];
if(left[T] == 0 || right[T] == 0)
T = left[T] + right[T];
else
key[T] = Delete(left[T], key[T] + 1);
return k;
}
if(v < key[T])
return Delete(left[T], v);
else
return Delete(right[T], v);
}
void select(int &T, int k, int &c, int &v)
{
int n = size[left[T]] + 1;
if(n == k)
{
c = client[T];
v = key[T];
Delete(T, v);
return ;
}
-- size[T];
if(k < n)
select(left[T], k, c, v);
else
select(right[T], k - n, c, v);
}
int main()
{
int k, c, v;
node = T = left[0] = right[0] = size[0] = 0;
for(;;)
{
scanf("%d", &k);
if(!k)
break;
if(k == 1)
{
scanf("%d%d", &c, &v);
Insert(T, c, v);
}
else if(k == 2)
{
if(size[T])
{
select(T, size[T], c, v);
printf("%d\n", c);
}
else
printf("0\n");
}
else
{
if(size[T])
{
select(T, 1, c, v);
printf("%d\n", c);
}
else
printf("0\n");
}
}
return 0;
}


總結

以上是生活随笔為你收集整理的POJ 3481 Double Queue的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人合集 | 欧美黑人一级爽快片淫片高清 | 日本视频网 | 99国产精品国产免费观看 | 91精品国产成人 | 抱着老师的嫩臀猛然挺进视频 | 色999视频| 你懂的日韩 | 国产精品丝袜黑色高跟 | 1区2区3区在线观看 久久久久久久久久久影院 成人网址在线观看 | 91精品国产乱码久久久张津瑜 | 特级黄色片 | 天天干天天操av | 俄罗斯美女一级爱片 | 日本体内she精高潮 男女视频在线免费观看 | 精品国产乱码久久久人妻 | 国产精品成人国产乱 | 精品视频免费 | 人妻无码久久精品人妻 | 中文字幕亚洲欧美 | 夜夜免费视频 | 毛片基地在线观看 | 美女av免费看 | 69福利社区 | 日本a视频在线观看 | 91在线观看免费视频 | 草草久久久无码国产专区 | 新天堂在线 | 国产精品日日摸夜夜爽 | 91麻豆精品国产91久久久无需广告 | 国产真实乱人偷精品 | 亚洲一区二区免费看 | 天堂久久一区 | 久久99热这里只有精品 | 日本精品久久久久中文字幕 | 日韩精品视频一区二区三区 | 69午夜| 国产午夜精品福利 | 久久综合九色综合欧美狠狠 | www欧美 | 久久成人在线视频 | 日韩一区二区av | 香蕉视频在线观看www | 白嫩初高中害羞小美女 | www日韩在线观看 | 国产精品xxx | 青青草综合网 | 91视频99| 日本免费三片在线播放 | 丁香婷婷综合激情 | 色哟哟免费在线观看 | 成人精品 | 黄色片高清 | 高清无码一区二区在线观看吞精 | 乱色欧美 | 妺妺窝人体色www聚色窝仙踪 | 日本91网站 | 黄色免费播放 | 国产伦精品一区二区三区免费迷 | 可以免费看的av | 美女撒尿无遮挡网站 | 国产明星换脸xxxx色视频 | 日韩国产精品一区二区三区 | 免费人成在线观看网站 | www.久久久久久久久 | 天天干天天综合 | 日本在线观看一区 | 亚洲 欧洲 日韩 | 激情欧美日韩 | 国产精品久久久久久中文字 | 黄色三级大片 | 午夜影院 | 一本到高清 | 日韩123| 亚洲免费a| 国产精品91视频 | 青青色在线 | 欧美人与动牲交xxxxbbbb | av影音先锋| 玩偶姐姐在线看 | 青青视频一区二区 | 久热超碰 | 欧美成人综合网站 | 毛片91 | 欧美hdxxxx | 国产91久 | 欧美在线一 | 国产美女三级无套内谢 | 成人激情四射网 | 国产乱码久久久久 | 成人高清视频在线观看 | av超碰在线观看 | 日本在线免费视频 | 国产精品欧美激情在线 | 蜜桃成人在线视频 | 九九久视频 | 黄网免费观看 | av天天网| 总裁憋尿呻吟双腿大开憋尿 |