Submission #14019

#TimeUsernameProblemLanguageResultExecution timeMemory
14019pjsdream버블 정렬 (OJUZ10_bubblesort)C++14
100 / 100
85 ms6552 KiB
#pragma warning(disable:4996) #include <stdio.h> #include <algorithm> using namespace std; int n, k; int a[100000]; int v[100000]; pair<int, int> p[100000]; int ts; int t1[400000]; int t2[400000]; int cnt[100000]; int ans[100000]; int mymin(int a, int b) { return a<b?a:b; } int mymax(int a, int b) { return a>b?a:b; } int t1find(int l, int r) { int res=0; for (l+=ts, r+=ts; l<=r; l/=2, r/=2) { if (l&1) { res += t1[l]; l++; } if (!(r&1)) { res += t1[r]; r--; } } return res; } void t1insert(int x) { for (x+=ts; x; x/=2) t1[x]++; } int t2find(int k) { int p = 1; while (p < ts) { int l = p*2; int r = l+1; if (r >= ts+n || k < t2[l]) { p = l; } else { k -= t2[l]; p = r; } } return p - ts; } void t2erase(int x) { for (x+=ts; x; x/=2) t2[x]--; } int main () { scanf("%d%d", &n, &k); for (int i=0; i<n; i++) scanf("%d", &a[i]), p[i] = make_pair(a[i], i); sort(p, p+n); for (int i=0; i<n; i++) { if (i && p[i].first == p[i-1].first) v[p[i].second] = v[p[i-1].second]; else v[p[i].second] = i; } for (ts=1; ts<n; ts*=2); for (int i=0; i<n; i++) { cnt[i] = mymax(t1find(v[i]+1, n-1) - k, 0); t1insert(v[i]); } for (int i=0; i<n; i++) t2[ts+i] = 1; for (int i=ts-1; i>=1; i--) { int l = i*2; int r = l+1; if (l < ts+n) t2[i] += t2[l]; if (r < ts+n) t2[i] += t2[r]; } for (int i=0; i<n; i++) { int id = t2find(cnt[ p[i].second ]); ans[id] = p[i].first; t2erase(id); } for (int i=0; i<n; i++) printf("%d ", ans[i]); printf("\n"); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...