提出 #71340270
ソースコード 拡げる
#include <bits/stdc++.h>
#include <map>
using namespace std;
typedef long long ll;
const int maxn=(2e5)+10;
int n,q,a[maxn];
pair<int,int> b[maxn];
#define MP make_pair
int A[maxn],B[maxn];
int tr[maxn],cnt[maxn];
void add(int x) {
for (;x<=n;x+=x&(-x)) tr[x]++;
}
int query(int x) {
int res=0;
for (;x;x-=x&(-x)) res+=tr[x];
return res;
}
ll preA[maxn],preB[maxn];
pair<int,int> ans[maxn];
vector<int> pos[maxn];
vector<pair<int,int> > Q1[maxn],Q2[maxn];
void solve(vector<pair<int,int> > *Q,int flag) {
for (int i=1;i<=n;i++) tr[i]=0,pos[i].clear();
for (int i=n;i>=1;i--) {
if (i<n) {
add(a[i+1]);
pos[a[i+1]].push_back(i+1);
}
for (pair<int,int> A : Q[i]) {
int k=A.first,id=A.second;
int l=1,r=n,mid,res=-1;
while (l<=r) {
mid=(l+r)>>1;
if (query(mid)>=k) res=mid,r=mid-1;
else l=mid+1;
}
k-=query(res-1);
// if (id==5) printf("> %d %d %d\n",k,res,flag);
res=pos[res][k-1];
ans[id].second=res;
}
}
}
int main() {
scanf("%d %d",&n,&q);
for (int i=1;i<=n;i++) {
scanf("%d",&a[i]);
b[i]=MP(a[i],i);
}
sort(b+1,b+n+1);
int fd=-1;
for (int i=1;i<n;i++) if (b[i].first==b[i+1].first) { fd=i; break; }
for (int i=n;i>=1;i--) {
A[i]=query(a[i]-1);
B[i]=n-i-cnt[a[i]]-A[i];
cnt[a[i]]++,add(a[i]);
}
for (int i=1;i<=n;i++) preA[i]=preA[i-1]+A[i],preB[i]=preB[i-1]+B[i];
ll tot=(ll)n*(n-1)/2;
for (int _=1;_<=q;_++) {
ll k; scanf("%lld",&k);
if (k<=preA[n]) {
int l=lower_bound(preA+1,preA+n+1,k)-preA;
k-=preA[l-1];
ans[_].first=l;
Q1[l].push_back(MP(k,_));
} else if (k>=tot-preB[n]+1) {
k=tot-k+1;
int l=lower_bound(preB+1,preB+n+1,k)-preB;
k-=preB[l-1];
ans[_].first=l;
Q2[l].push_back(MP(k,_));
} else {
assert(fd!=-1);
ans[_]=MP(b[fd].second,b[fd+1].second);
}
}
solve(Q1,1);
for (int i=1;i<=n;i++) a[i]=n-a[i]+1;
solve(Q2,-1);
for (int i=1;i<=q;i++) printf("%d %d\n",ans[i].first,ans[i].second);
return 0;
}
提出情報
| 提出日時 |
|
| 問題 |
G - One Time Swap 2 |
| ユーザ |
wygz |
| 言語 |
C++23 (GCC 15.2.0) |
| 得点 |
575 |
| コード長 |
2415 Byte |
| 結果 |
AC |
| 実行時間 |
233 ms |
| メモリ |
38688 KiB |
コンパイルエラー
./Main.cpp: In function 'void solve(std::vector<std::pair<int, int> >*, int)':
./Main.cpp:23:42: warning: unused parameter 'flag' [-Wunused-parameter]
23 | void solve(vector<pair<int,int> > *Q,int flag) {
| ~~~~^~~~
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
575 / 575 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
00_sample_00.txt, 00_sample_01.txt |
| All |
00_sample_00.txt, 00_sample_01.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| 00_sample_00.txt |
AC |
4 ms |
4024 KiB |
| 00_sample_01.txt |
AC |
4 ms |
3744 KiB |
| 01_test_00.txt |
AC |
51 ms |
15184 KiB |
| 01_test_01.txt |
AC |
115 ms |
26480 KiB |
| 01_test_02.txt |
AC |
131 ms |
27680 KiB |
| 01_test_03.txt |
AC |
167 ms |
28572 KiB |
| 01_test_04.txt |
AC |
188 ms |
29640 KiB |
| 01_test_05.txt |
AC |
216 ms |
33856 KiB |
| 01_test_06.txt |
AC |
225 ms |
35196 KiB |
| 01_test_07.txt |
AC |
233 ms |
38688 KiB |
| 01_test_08.txt |
AC |
125 ms |
22480 KiB |
| 01_test_09.txt |
AC |
146 ms |
24096 KiB |
| 01_test_10.txt |
AC |
167 ms |
28584 KiB |
| 01_test_11.txt |
AC |
184 ms |
33688 KiB |
| 01_test_12.txt |
AC |
127 ms |
22380 KiB |
| 01_test_13.txt |
AC |
145 ms |
24268 KiB |
| 01_test_14.txt |
AC |
165 ms |
28360 KiB |
| 01_test_15.txt |
AC |
174 ms |
33632 KiB |
| 01_test_16.txt |
AC |
124 ms |
22388 KiB |
| 01_test_17.txt |
AC |
144 ms |
24112 KiB |
| 01_test_18.txt |
AC |
168 ms |
28528 KiB |
| 01_test_19.txt |
AC |
191 ms |
33548 KiB |
| 01_test_20.txt |
AC |
131 ms |
22420 KiB |
| 01_test_21.txt |
AC |
153 ms |
24120 KiB |
| 01_test_22.txt |
AC |
171 ms |
28452 KiB |
| 01_test_23.txt |
AC |
184 ms |
33532 KiB |
| 01_test_24.txt |
AC |
28 ms |
5436 KiB |
| 01_test_25.txt |
AC |
38 ms |
6852 KiB |
| 01_test_26.txt |
AC |
41 ms |
7320 KiB |
| 01_test_27.txt |
AC |
47 ms |
7376 KiB |
| 01_test_28.txt |
AC |
55 ms |
7940 KiB |
| 01_test_29.txt |
AC |
27 ms |
6688 KiB |