제출 #778158

#제출 시각아이디문제언어결과실행 시간메모리
778158boris_mihov정렬하기 (IOI15_sorting)C++17
54 / 100
27 ms484 KiB
#include "sorting.h" #include <algorithm> #include <iostream> #include <numeric> #include <cassert> #include <vector> #include <stack> typedef long long llong; const int MAXN = 200000 + 10; const int INF = 1e9; int n; int p[MAXN]; int pos[MAXN]; bool vis[MAXN]; std::vector <std::pair <int,int>> ops; std::stack <std::pair <int,int>> st; void getOps() { ops.clear(); std::fill(vis + 1, vis + 1 + n, false); for (int i = 1 ; i <= n ; ++i) { if (vis[i]) { continue; } while (!st.empty()) { st.pop(); } int curr = i; while (!vis[curr]) { vis[curr] = true; curr = p[curr]; if (!vis[curr]) { st.push({p[curr], p[i]}); } } while (!st.empty()) { ops.push_back(st.top()); st.pop(); } } } void makeSwap(int x, int y) { std::swap(p[x], p[y]); pos[p[x]] = x; pos[p[y]] = y; } int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) { n = N; for (int i = 1 ; i <= n ; ++i) { p[i] = S[i - 1] + 1; } for (int i = 1 ; i <= M ; ++i) { std::swap(p[X[i - 1] + 1], p[Y[i - 1] + 1]); getOps(); if (ops.size() <= i) { while (ops.size() < i) { ops.push_back({1, 1}); } break; } } for (int i = 1 ; i <= n ; ++i) { p[i] = S[i - 1] + 1; pos[p[i]] = i; } for (int i = 0 ; i < ops.size() ; ++i) { makeSwap(X[i] + 1, Y[i] + 1); P[i] = pos[ops[i].first] - 1; Q[i] = pos[ops[i].second] - 1; makeSwap(P[i] + 1, Q[i] + 1); } return ops.size(); }

컴파일 시 표준 에러 (stderr) 메시지

sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:78:24: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   78 |         if (ops.size() <= i)
      |             ~~~~~~~~~~~^~~~
sorting.cpp:80:31: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   80 |             while (ops.size() < i)
      |                    ~~~~~~~~~~~^~~
sorting.cpp:95:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |     for (int i = 0 ; i < ops.size() ; ++i)
      |                      ~~^~~~~~~~~~~~
sorting.cpp:103:20: warning: conversion from 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
  103 |     return ops.size();
      |            ~~~~~~~~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...