提出 #73138178


ソースコード 拡げる

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int MAXN = 3e5 + 10;

int T, n, m, a[MAXN], b[MAXN], pos[MAXN], c[MAXN];

inline void add(int k) { for (int i = k; i <= n; i += i & -i) c[i]++; }
inline int ask(int k) { int res = 0; for (int i = k; i; i &= i - 1) res += c[i]; return res; }

deque<int> p[MAXN]; int pt[MAXN];

vector<tuple<int, int, int>> g[MAXN]; int qcnt; ll ans[MAXN];

int main() {
	for (scanf("%d", &T); T--; ) {
		scanf("%d%d", &n, &m);
		for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
		for (int i = 1; i <= n; i++) scanf("%d", &b[i]);
		for (int i = 1; i <= n; i++) p[i].clear(), pt[i] = pos[i] = 0;
		for (int i = 1; i <= n; i++) p[b[i]].emplace_back(i);
		for (int i = 1; i <= n; i++) a[i] = p[a[i]][pt[a[i]]++], pos[a[i]] = i;
//		for (int i = 1; i <= n; i++) printf("%d ", a[i]); puts("");
		qcnt = 0;
		for (int i = 1; i <= n; i++) g[i].clear();
		for (int i = 1; i <= n; i++) {
			if (p[i].size() < 2) continue;
			for (int j = 1; j < p[i].size(); j++) {
				int x = p[i][j - 1], y = p[i][j];
				int u = pos[x], v = pos[y]; qcnt++;
//				printf("[%d,%d]:%d %d\n", x, y, u, v);
				g[u + 1].emplace_back(x, -1, qcnt);
				g[u + 1].emplace_back(y - 1, 1, qcnt);
				g[v].emplace_back(x, 1, qcnt);
				g[v].emplace_back(y - 1, -1, qcnt);
			}
		}
		for (int i = 1; i <= qcnt; i++) ans[i] = 0;
		ll sum = 0, res = 1e18;
		for (int i = 1; i <= n; i++) c[i] = 0;
		for (int i = n; i; i--) {
			sum += ask(a[i]), add(a[i]);
			for (auto _ : g[i]) ans[get<2>(_)] += get<1>(_) * ask(get<0>(_));
		}
		for (int i = 1; i <= qcnt; i++) res = min(res, ans[i] << 1 | 1);
//		for (int i = 1; i <= qcnt; i++) printf("%lld ", ans[i]); puts("");
		ll k = (sum + m - 1) / m; sum = m * k - sum;
		if (sum & 1) {
			if (m & 1) {
				if (res <= sum) printf("%lld\n", k);
				else printf("%lld\n", k + 1);
			} else {
				if (res < 1e18) printf("%lld\n", (max<ll>(0, res - sum) + m - 1) / m + k);
				else puts("-1");
			}
		} else printf("%lld\n", k);
	}
}

提出情報

提出日時
問題 E - Swap K times
ユーザ Register_int
言語 C++23 (GCC 15.2.0)
得点 700
コード長 2055 Byte
結果 AC
実行時間 285 ms
メモリ 240344 KiB

コンパイルエラー

./Main.cpp: In function 'int main()':
./Main.cpp:31:43: warning: comparison of integer expressions of different signedness: 'int' and 'std::deque<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |                         for (int j = 1; j < p[i].size(); j++) {
      |                                         ~~^~~~~~~~~~~~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 700 / 700
結果
AC × 1
AC × 32
セット名 テストケース
Sample sample-01.txt
All 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 02-01.txt, 02-02.txt, 02-03.txt, 03-01.txt, 03-02.txt, 03-03.txt, 04-01.txt, 04-02.txt, 04-03.txt, 04-04.txt, 04-05.txt, 04-06.txt, 04-07.txt, 04-08.txt, 04-09.txt, 04-10.txt, 04-11.txt, 04-12.txt, 04-13.txt, 04-14.txt, 05-01.txt, 05-02.txt, 05-03.txt, 05-04.txt, 05-05.txt, 05-06.txt, sample-01.txt
ケース名 結果 実行時間 メモリ
01-01.txt AC 152 ms 205384 KiB
01-02.txt AC 146 ms 205320 KiB
01-03.txt AC 145 ms 205432 KiB
01-04.txt AC 148 ms 205456 KiB
01-05.txt AC 153 ms 205748 KiB
02-01.txt AC 173 ms 210964 KiB
02-02.txt AC 174 ms 211016 KiB
02-03.txt AC 178 ms 209092 KiB
03-01.txt AC 184 ms 209092 KiB
03-02.txt AC 181 ms 209096 KiB
03-03.txt AC 186 ms 209096 KiB
04-01.txt AC 195 ms 240272 KiB
04-02.txt AC 195 ms 240344 KiB
04-03.txt AC 155 ms 209076 KiB
04-04.txt AC 285 ms 240216 KiB
04-05.txt AC 250 ms 236480 KiB
04-06.txt AC 222 ms 228752 KiB
04-07.txt AC 220 ms 228784 KiB
04-08.txt AC 222 ms 228856 KiB
04-09.txt AC 221 ms 228808 KiB
04-10.txt AC 231 ms 232368 KiB
04-11.txt AC 187 ms 217224 KiB
04-12.txt AC 186 ms 217224 KiB
04-13.txt AC 217 ms 222796 KiB
04-14.txt AC 177 ms 212532 KiB
05-01.txt AC 165 ms 211360 KiB
05-02.txt AC 162 ms 211272 KiB
05-03.txt AC 161 ms 211136 KiB
05-04.txt AC 194 ms 240324 KiB
05-05.txt AC 202 ms 240272 KiB
05-06.txt AC 201 ms 240272 KiB
sample-01.txt AC 103 ms 205332 KiB