Submission #38700


ソースコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include<bits/stdc++.h>
using namespace std;
vector<int> v,vv;
pair<char,int> a[1000000];
int up(int b,int n);
int fa(int l,int r,int b,int c,int d);
int main(){
int n,k,i,j,mi,r,l,mid,cnt=0,f=0;
string s;
cin>>s;
n=s.size();
i=1;
while(n>i){
i*=2;
}
n=i;
for(i=n-1;i<n*2-1;i++){
a[i].first='{';
a[i].second=i+n+n;
}
a[900000].first='{';
a[900000].second=n*3;
for(i=0;i<s.size();i++){
a[i+n-1].first=s[i];
a[i+n-1].second=i;
v.push_back(i);
up(i,n);
}
cin>>k;
for(i=1;i<s.size();i++){
if(s[i-1]>s[i]){
f=1;
}
}
if(f==1){
while(k>0&&!v.empty()){
if(v.size()-1>k){
mi=k;
}
else{
mi=v.size()-1;
}
i=fa(0,v[mi],0,0,n-1);
l=0;
r=v.size();
mid=(r+l)/2;
while(v[mid]!=a[i].second&&r>=l){
mid=(r+l)/2;
if(v[mid]>a[i].second){
r=mid-1;
}
if(v[mid]<a[i].second){
l=mid+1;
}
}
k-=mid;
vv.push_back(v[mid]);
v.erase(v.begin()+mid);
a[n-1+a[i].second].first='{';
up(a[i].second,n);
}
}
cnt=0;
while(cnt<vv.size()){
cout<<s[vv[cnt]];
cnt++;
}
cnt=0;
while(cnt<v.size()){
cout<<s[v[cnt]];
cnt++;
}
cout<<endl;
return(0);
}
int fa(int l,int r,int b,int c,int d){
int x,y;
if(d<l||r<c){
return(900000);
}
else{
if(l<=c&&d<=r){
return(b);
}
else{
x=fa(l,r,b*2+1,c,(c+d)/2);
y=fa(l,r,b*2+2,(c+d)/2+1,d);
if(a[x].first>a[y].first){
return(y);
}
else{
return(x);
}
}
}
return(0);
}
int up(int b,int n){
b=b+n-1;
while(b>0){
b=(b-1)/2;
if(a[b*2+1].first>a[b*2+2].first){
if(a[b].first==a[b*2+2].first&&a[b].second==a[b*2+2].second){
b=0;
}
else{
a[b].first=a[b*2+2].first;
a[b].second=a[b*2+2].second;
}
}
else{
if(a[b].first==a[b*2+1].first&&a[b].second==a[b*2+1].second){
b=0;
}
else{
a[b].first=a[b*2+1].first;
a[b].second=a[b*2+1].second;
}
}
}
return(0);
}

ステータス

項目 データ
問題 0963 - 人気のユーザ名
ユーザー名 珈琲の素材は虚数渦動
投稿日時 2018-07-12 16:57:53
言語 C++11
状態 Accepted
得点 14
ソースコード長 2141 Byte
最大実行時間 483 ms
最大メモリ使用量 8528 KB

セット

セット 得点 Cases
1 ALL 14 / 14 *

テストケース

ファイル名 状態 実行時間 メモリ使用量 #
in1.txt AC 22 ms 604 KB
1
in2.txt AC 21 ms 740 KB
1
in3.txt AC 27 ms 1836 KB
1
in4.txt AC 25 ms 2104 KB
1
in5.txt AC 27 ms 1936 KB
1
in6.txt AC 18 ms 1896 KB
1
in7.txt AC 21 ms 1852 KB
1
in8.txt AC 22 ms 1944 KB
1
in9.txt AC 17 ms 2036 KB
1
in10.txt AC 18 ms 440 KB
1
in11.txt AC 18 ms 404 KB
1
in12.txt AC 23 ms 500 KB
1
in13.txt AC 21 ms 464 KB
1
in14.txt AC 24 ms 432 KB
1
in15.txt AC 24 ms 528 KB
1
in16.txt AC 18 ms 620 KB
1
in17.txt AC 25 ms 5184 KB
1
in18.txt AC 28 ms 5196 KB
1
in19.txt AC 35 ms 5328 KB
1
in20.txt AC 483 ms 5560 KB
1
in21.txt AC 30 ms 7920 KB
1
in22.txt AC 129 ms 8120 KB
1
in23.txt AC 115 ms 8324 KB
1
in24.txt AC 74 ms 8528 KB
1
in25.txt AC 27 ms 1820 KB
1
in26.txt AC 20 ms 1780 KB
1
in27.txt AC 26 ms 1736 KB
1
in28.txt AC 23 ms 1804 KB
1
in29.txt AC 23 ms 1760 KB
1
in30.txt AC 28 ms 1800 KB
1
in31.txt AC 314 ms 8144 KB
1
in32.txt AC 247 ms 6628 KB
1