//主要这些东西竟然都不会手打...
队列
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #include<iostream> 3 #define MAXN 1<<20 4 using namespace std; 5 int n; 6 struct queue{ 7 int l,r,q[MAXN]; 8 queue():l(1),r(0) {} 9 inline void push(int x){q[++r]=x;} 10 inline void pop(){l++;} 11 inline int front(){return q[l];} 12 inline bool size(){return l<=r;} 13 }; 14 int main(){ 15 scanf("%d",&n); 16 for(int i=0;i<n;i++) q.push(i+1); 17 while(q.size()) { 18 printf("%d ",q.front());q.pop();q.push(q.front());q.pop(); 19 } 20 return 0; 21 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #include<iostream> 3 #define MAXN 1<<20 4 using namespace std; 5 int n; 6 struct queue{ 7 int l,r,q[MAXN]; 8 queue():l(1),r(0) {} 9 inline void push(int x){q[(++r)|(MAXN-1)]=x;} 10 inline void pop(){l++;} 11 inline int front(){return q[l|(MAXN-1)];} 12 inline bool size(){return l<=r;} 13 }; 14 /*struct queue{ 15 int l,r,q[MAXN]; 16 queue():l(1),r(0) {} 17 inline void push(int x){q[(++r)&(MAXN-1)]=x;} 18 inline void pop(){l++;} 19 inline int front(){return q[l&(MAXN-1)];} 20 inline bool size(){return l<=r;} 21 };*/ 22 queue q; 23 int main(){ 24 scanf("%d",&n); 25 for(int i=0;i<n;i++) q.push(i+1); 26 while(q.size()) { 27 printf("%d ",q.front());q.pop();q.push(q.front());q.pop(); 28 } 29 return 0; 30 }
栈
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #define MAXN 1<<20 3 using namespace std; 4 struct Tstack{ 5 const int MAXdata=10000; 6 int top,data[MAXdata]; 7 Tstack() {top=0;} 8 void push(int x){data[++top]=x;} 9 void pop(){top--;} 10 int top(){return data[top];} 11 bool empty(){return top==0;} 12 }; 13 int main(){ 14 15 }
边表
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #include<vector> 3 using namespace std; 4 const int MAXN=1<<20; 5 vector <pair<int,int> >G[MAXN]; 6 inline void add(int u,int v,int w){ 7 G[u].push_back(make_pair(v,w)); 8 G[v].push_back(make_pair(u,w)); 9 } 10 int main(){ 11 for(int i=0;i<G[i].size();i++){ 12 int v=G[u][i].first; 13 int w=G[u][i].second; 14 } 15 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #include<vector> 3 #define MAXN 1<<20 4 using namespace std; 5 vector <int> linker[MAXN],v[MAXN]; 6 inline void addedge(int x,int y,int z){ 7 linker[x].push_back(y); 8 v[x].push_back(z); 9 } 10 int main(){ 11 for(int i=0;i<linker[x].size();i++){ 12 //查询元素个数:size() 13 //do something 14 } 15 } 16 // 稀疏图 17 18 vector
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #define MAXN 1<<20 3 using namespace std; 4 struct edge{ 5 int to,next,v; 6 }e[MAXN]; 7 //add edge 8 inline void insert(int u,int v,int w){ 9 cnt++; 10 e[cnt].to=v; 11 e[cnt].next=last[u]; 12 last[u]=cnt; 13 e[cnt].v=w; 14 } 15 // 遍历 16 int main(){ 17 for(int i=last[now];i;i=e[i].next){ 18 //do sth 19 } 20 } 21 // 稠密图
堆
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #include<queue> 3 #define MAXN 1000005 4 using namespace std; 5 int n; 6 priority_queue<int,vector<int>,greater<int> >q; 7 int main(){ 8 scanf("%d",&n); 9 while(n--){ 10 int time;scanf("%d",&time); 11 if(time==1) {int x;scanf("%d",&x);q.push(x);} 12 if(time==2) {int top;top=q.top();printf("%d ",top);} 13 if(time==3) {q.pop();} 14 } 15 return 0; 16 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #define MAXN 100005 6 using namespace std; 7 int n,sum=0; 8 struct heap{ 9 int t[MAXN]; 10 void push(int x){ 11 t[++sum]=x; 12 for(int i=sum,j=i>>1;j;i=j,j=i>>1){ 13 if(t[j]>t[i]) swap(t[j],t[i]); 14 } 15 } 16 void pop(){ 17 t[1]=t[sum--]; 18 for(int i=1,j=i<<1;j<=sum;i=j,j=i<<1){ 19 if(j+1<=sum&&t[j+1]<t[j]) j++; 20 if(t[i]<t[j]) break; 21 else swap(t[i],t[j]); 22 } 23 } 24 }q; 25 int main(){ 26 scanf("%d",&n); 27 while(n--){ 28 int time;scanf("%d",&time); 29 if(time==1) {int x;scanf("%d",&x);q.push(x);} 30 if(time==2) {int top;top=q.t[1];printf("%d ",top);} 31 if(time==3) {q.pop();} 32 } 33 return 0; 34 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 #include<string.h> 3 const int maxN=1000005; 4 int swap(int &a,int &b){int c=a;a=b;b=c;} 5 struct heap{ 6 int data[maxN],tail; 7 heap(){tail=0;} 8 inline int min(int a,int b){ 9 if(b>tail)return a; 10 return data[a]<data[b]?a:b; 11 } 12 void up(int x){ 13 if(x==1)return; 14 if(data[x]<data[x>>1]){ 15 swap(data[x],data[x>>1]); 16 up(x>>1); 17 } 18 } 19 void down(int x){ 20 if(x<<1>tail)return; 21 int p=min(x<<1,(x<<1)+1); 22 if(data[p]<data[x]){ 23 swap(data[p],data[x]); 24 down(p); 25 } 26 } 27 void push(int x){data[++tail]=x;up(tail);} 28 void pop(){swap(data[tail],data[1]);tail--;down(1);} 29 int top(){return data[1];} 30 }h; 31 int main(){ 32 int n,a,b; scanf("%d",&n); 33 while(n--){ 34 scanf("%d",&a); 35 if(a==1){ 36 scanf("%d",&b); 37 h.push(b); 38 } 39 if(a==2){ 40 printf("%d ",h.top()); 41 } 42 if(a==3){ 43 h.pop(); 44 } 45 } 46 }