hdu4006
題目連線:
題意:查詢在某些資料中的第k大數
雖然可以有很多種方法來做,但是作為sbt來練手還是乙個很不錯的題目!這裡面只有sbt的旋轉,維護,插入,選擇這四種基本操作,不涉及到刪除和後繼前驅這些操作,水題
#include#include#include#include#include#includeusing namespace std;
const int maxn=1000005;
int l[maxn],r[maxn],s[maxn],k[maxn];
int node;
int root;
//左旋轉處理
void left_rotate(int &t)
void right_rotate(int &t)
void maintain(int &t,bool flag)
else return;
}else
else return ;
}maintain(l[t],false);
maintain(r[t],true);
maintain(t,false);
maintain(t,true);
}void insert(int &t,int v)//插入新節點
else
}//取得第k大的數
int select(int &t,int kk)
int main()
else}}
return 0;
}
poj3481
題目連線:
題意:對於一些操作 ;當輸入的c==1時表示將優先順序為p的資料編號k加入到佇列中;當 c == 2時表示輸出佇列中權值最大的編號k,並出隊;當 c==3時表示輸出佇列中權值最小的編號k,並出隊。當沒得資料時輸出0
#include#include#include#include#includeusing namespace std;
const int maxn=1000002;
int lson[maxn],rson[maxn],size[maxn],v[maxn],key[maxn];
int node;
int root;
void left_rotate(int &x)
void right_rotate(int &y)
void maintain(int &t,bool flag)
else return;
}else
else return;
}maintain(lson[t],false);
maintain(rson[t],true);
maintain(t,false);
maintain(t,true);
}void insert(int &t,int v,int k)
else
}int rank(int t,int vv)
int maxnum()
if(t!=p)rson[p]=lson[t];
else root=lson[t];
return key[t];
}int minnum()
if(t!=p)lson[p]=rson[t];
else root=rson[t];
return key[t];
}int select(int t,int k)
void left_rotate(int &x)
void right_rotate(int &x)
void maintain(int &t,bool flag)
else return ;
}else
else return ;
}maintain(l[t],false);
maintain(r[t],true);
maintain(t,false);
maintain(t,true);
}void insert(int &t,int v)
else
}int sdelete(int &t,int v)
else
void right_rotate(int &t)
void maintain(int &t,bool flag)
else return;
}else
else return ;
}maintain(l[t],false);
maintain(r[t],true);
maintain(t,false);
maintain(t,true);
}//插入新節點
void insert(int &t,long long v)
else
}//刪除結點,利用的是前驅替換
long long sdelete(int &t,long long v)
else
//查詢樹中是否存在元素
int search(int t,long long kk)
void left_rotate(int &t)
void maintain(int &t,bool flag)
else return;}}
else
else
else return;}}
maintain(t,false);
maintain(t,true);
maintain(lson[t],false);
maintain(rson[t],true);
}void insert(int &t,int v)
else
}int sdelete(int &t,int v)
else if(v>key[t])return sdelete(rson[t],v);
else return sdelete(lson[t],v);
}int select(int t,int k)
while(size[root]>1)
cout<
poj3750
題目連線:
題意:約瑟夫問題--依次輸出出環順序時所對應的的人的名字
#include#include#include#include#include#include#include#include#include#define maxn 100005
using namespace std;
int lson[maxn],rson[maxn];
int size[maxn],key[maxn];
char name[70][20];
int node,root;
void right_rotate(int &t)
void left_rotate(int &t)
void maintain(int &t,bool flag)
else return;}}
else
else
else return;}}
maintain(t,false);
maintain(t,true);
maintain(lson[t],false);
maintain(rson[t],true);
}void insert(int &t,int v)
else
}int sdelete(int &t,int v)
else if(v>key[t])return sdelete(rson[t],v);
else return sdelete(lson[t],v);
}int select(int t,int k)
scanf("%d,%d",&m,&k);
while(size[root])
void left_rotate(int &t)
void maintain(int &t,bool flag)
else return;}}
else
else
else return;}}
maintain(t,false);
maintain(t,true);
maintain(lson[t],false);
maintain(rson[t],true);
}void insert(int &t,int v)
else
}int sdelete(int &t,int v)
else if(v>key[t])return sdelete(rson[t],v);
else return sdelete(lson[t],v);
}int select(int t,int k)
scanf("%d",&k);
m=k;
cout<
幾個概率題
原文 1,一根木棒,截成三截,組成三角形的概率是多少?2,拋乙個六面的色子,連續拋直到拋到6為止,問期望的拋的次數是多少?3,乙個木桶裡面有m個白球,每分鐘從桶中隨機取出乙個球塗成紅色 無論白或紅都塗紅 再放回,問將桶中球全部塗紅的期望時間是多少?4,你有一把寶劍。每使用乙個寶石,有50 的概率會成...
幾個概率題
1,一根木棒,截成三截,組成三角形的概率是多少?2,拋乙個六面的色子,連續拋直到拋到6為止,問期望的拋的次數是多少?3,乙個木桶裡面有m個白球,每分鐘從桶中隨機取出乙個球塗成紅色 無論白或紅都塗紅 再放回,問將桶中球全部塗紅的期望時間是多少?4,你有一把寶劍。每使用乙個寶石,有50 的概率會成功讓寶...
幾個概率題
原文 1,一根木棒,截成三截,組成三角形的概率是多少?2,拋乙個六面的色子,連續拋直到拋到6為止,問期望的拋的次數是多少?3,乙個木桶裡面有m個白球,每分鐘從桶中隨機取出乙個球塗成紅色 無論白或紅都塗紅 再放回,問將桶中球全部塗紅的期望時間是多少?4,你有一把寶劍。每使用乙個寶石,有50 的概率會成...