hdu 5119(2014北京)
题意:
随机选择一个数,如果后面有比他小的就进行交换,直到没有为止(算一轮)。求多少轮后为递增序列
思路:
倒着找,如果有比经过的最小数大的,ans+1
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; int a[1000005]; int main() { int T,n; scanf("%d",&T); int cas = 1; while(T--) { scanf("%d",&n); for(int i = 1; i <= n; i++) scanf("%d",&a[i]); int tmin = 0x3f3f3f3f; int ans= 0; for(int i = n;i >= 1;i -- ) { if(a[i] > tmin) ans ++; tmin=min(tmin,a[i]); } printf("Case #%d: %d\n",cas++,ans); } return 0; }