-
A - Preparing for Merge Sort
- CodeForces - 847B
- 题意:给定一个序列 按照 顺序去选 只要这个数严格比上一个数大就可以选,多次进行此操作,直到序列为空
- 思路:发现规律 每一次新产生的序列的最后一个数一定比上一次产生的小。根据这个特性可以实现可修改数组
- 并且不改变有序状态,每次可直接进行二分查询进行插入
-
#include<bits/stdc++.h> using namespace std; #define maxn 234567 int n,a,ok[maxn],cnt,id; vector<int>ans[maxn]; int main() { scanf("%d",&n); for(int i=1; i<=n; i++) { scanf("%d",&a); if(i==1) { ans[cnt].push_back(a); ok[cnt]=a; } else { if(a<=ok[cnt]) { cnt++; id=cnt; } else { int l=0,r=cnt; while(l<r) { int mid=(l+r)/2; if(ok[mid]>=a)l=mid+1; else r=mid; } id=r; } ans[id].push_back(a); ok[id]=a; } } for(int i=0; i<=cnt; i++) { int len=ans[i].size(); for(int j=0; j<len; j++) { printf("%d",ans[i][j]); if(j==len-1)printf("\n"); else printf(" "); } } return 0; }
A - Preparing for Merge Sort CodeForces - 847B -思维
最新推荐文章于 2019-02-07 14:50:07 发布