为什么插入排序都能写错啊QAQ

P1177 【模板】排序

``` #include<bits/stdc++.h> using namespace std; vector<int> s; int x,n; int main(){ freopen(".txt","r",stdin); scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&x); s.insert(lower_bound(s.begin(),s.end(),x),x); //在s中第一个大于等于x的数前插入x } for(vector<int>::iterator i=s.begin();i!=s.end();i++) //迭代器遍历 cout<<s[*i]<<" "; return 0; } ```
by 蒻得不行 @ 2018-11-02 23:34:03


注释freopen后过一个点
by 蒻得不行 @ 2018-11-02 23:37:33


```pascal void quick_sort(int x,int y) { int i=x,j=y,t;//t用于稍后的交换 int k=a[x]; if(i>=j) return; while (i<j) { while((i<j)&&a[j]>=k) j--; t=a[i]; a[i]=a[j]; a[j]=t; while((i<j)&&(a[i]<k)) i++; t=a[i]; a[i]=a[j]; a[j]=t; } quick_sort(x,i-1); quick_sort(i+1,y); return; } ```
by ☆Ork_Morry☆✔ @ 2018-11-05 20:37:25


@[六得不行](/space/show?uid=50690)
by ☆Ork_Morry☆✔ @ 2018-11-05 20:37:42


~~mmp发错了~~
by ☆Ork_Morry☆✔ @ 2018-11-05 20:41:14


```cpp #include <iostream> #include <cstdio> #include <algorithm> #include <cstdlib> using namespace std; struct qwq { int p1,p2; }o,q;//不会用pair所以。。。 qwq QWQ(int x,int y) { o.p1=x; o.p2=y; return o; }//相当于make pair struct asdf { int l,r,c,key; }tree[100001];//定义一棵树,左儿子、右儿子、权值、平衡种子 int n,g;//n个节点,树的根为g qwq chaifen(int p,int x) { if (p==0) return QWQ(0,0);//空树拆分成0 0 if (tree[p].c>tree[x].c) { q=chaifen(tree[p].l,x); tree[p].l=q.p2; return QWQ(q.p1,p); } q=chaifen(tree[p].r,x); tree[p].r=q.p1; return QWQ(p,q.p2); }//把一颗treap拆分成两颗treap //一颗treap中所有元素都比待插入元素大,另一颗所有元素都比待插入元素小 int hebing(int pf,int pl) { if (pf==0) return pl; if (pl==0) return pf;//一颗treap和空树合并仍是它本身 if (tree[pf].key>tree[pl].key)//按照key合并深度关系 { tree[pl].l=hebing(pf,tree[pl].l); return pl; } tree[pf].r=hebing(tree[pf].r,pl); return pf; }//合并,使两颗treap合并成一颗,仍符合小根堆和二叉排序树的性质 void charu(int x) { q=chaifen(g,x); g=hebing(hebing(q.p1,x),q.p2); } void dfs(int p) { if (p==0) return; dfs(tree[p].l); printf("%d ",tree[p].c); dfs(tree[p].r); }//因二叉排序树性质,中序遍历输出 int main() { scanf("%d",&n); for (int i=1;i<=n;++i) { scanf("%d",&tree[i].c); tree[i].key=rand()%2147483647; charu(i);//不断插入 } dfs(g); } ```
by ☆Ork_Morry☆✔ @ 2018-11-05 20:41:29


@[墨丽](/space/show?uid=135300) 我过了啊哈哈哈哈哈哈 ``` #include<bits/stdc++.h> using namespace std; vector<int> s; int x,n; int main(){ //freopen(".txt","r",stdin); scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&x); s.insert(upper_bound(s.begin(),s.end(),x),x); //在s中第一个大于等于x的数前插入x } for(vector<int>::iterator i=s.begin();i!=s.end();i++) //迭代器遍历 cout<<*i<<" "; return 0; } ```
by 蒻得不行 @ 2018-11-05 21:20:41


|