结构
//单调队列 //hh为队头,tt为队尾 //最形象的例题:https://www.luogu.com.cn/problem/P1886#submit #include<bits/stdc++.h> using namespace std; const int N=1000010; int n,k; int a[N],q[N];///a数组储存数据,q数组储存每个元素的下标; int main() { cin>>n>>k; for(int i=0;i<n;i++) cin>>a[i]; int hh=0,tt=-1;///创立队头和队尾 for(int i=0;i<n;i++) { if(hh<=tt&&i-k+1>q[hh]) hh++;///如果队列不为空并且窗口的最左边大于队头的下标的话,队头需要更新; while(hh<=tt&&a[q[tt]]>=a[i]) tt--;///每当插入元素,如果这个元素比队尾元素还要小,那么队尾元素没用,直接删除队尾元素; q[++tt]=i;///将元素下标存入队列 if(i>=k-1) cout<<a[q[hh]]<<" "; } cout<<endl; hh=0,tt=-1; for(int i=0;i<n;i++) { if(hh<=tt&&i-k+1>q[hh]) hh++; while(hh<=tt&&a[q[tt]]<=a[i]) tt--; q[++tt]=i; if(i>=k-1) cout<<a[q[hh]]<<" "; } return 0; } //创立无权邻接表 #include<bits/stdc++.h> using namespace std; const int N=100010; vector<int>g[N]; int n,m; int main() { cin>>n>>m; for(int i=1;i<=m;i++) { int x,y; cin>>x>>y; g[x].push_back(y); g[y],push_back(x); } for(int i=1;i<=n;i++) { cout<<i<<":"<<" "<<endl; for(auto v:g[i]) cout<<v<<" "; cout<<endl; } } // 创立有权邻接表 #include<bits/stdc++.h> using namespace std; const int N=100010; int n,m; struct node { int to; int val; }; vector<node>g[N]; int main() { cin>>n>>m; for(int i=1;i<=m;i++) { int a,b,c; node tmp; cin>>a>>b>>c; tmp.to=b; tmp.val=c; g[a].push_back(tmp); } for(int i=1;i<=n;i++) { cout<<i<<":"<<endl; for(auto v:g[i]) cout<<v.to<<" "<<v.val; cout<<endl; } return 0; }