Submission #621125

#TimeUsernameProblemLanguageResultExecution timeMemory
621125Bench0310Sorting (IOI15_sorting)C++17
100 / 100
245 ms25536 KiB
#include <bits/stdc++.h> #include "sorting.h" using namespace std; typedef long long ll; int findSwapPairs(int n,int s[],int m,int x[],int y[],int p[],int q[]) { auto solve=[&](int mv)->vector<array<int,2>> { vector<int> f(n,-1); for(int i=0;i<n;i++) f[i]=s[i]; for(int i=0;i<mv;i++) swap(f[x[i]],f[y[i]]); vector<bool> vis(n,0); vector<array<int,2>> v; for(int i=0;i<n;i++) { if(vis[i]) continue; int b=i; int a=i; while(!vis[a]) { vis[a]=1; a=f[a]; if(!vis[a]) v.push_back({b,a}); } } int sz=v.size(); if(sz<=mv) { f.assign(n,-1); for(int i=0;i<n;i++) f[i]=s[i]; vector<int> g(n,-1); for(int i=0;i<n;i++) g[f[i]]=i; vector<array<int,2>> res; for(int i=0;i<mv;i++) { swap(f[x[i]],f[y[i]]); swap(g[f[x[i]]],g[f[y[i]]]); if(i<sz) res.push_back({g[v[i][0]],g[v[i][1]]}); else res.push_back({g[0],g[0]}); } return res; } else return {{-1,-1}}; }; int l=-1,r=m; while(l<r-1) { int mv=(l+r)/2; auto res=solve(mv); if(!(res.size()==1&&res[0][0]==-1)) r=mv; else l=mv; } auto res=solve(r); for(int i=0;i<r;i++) { p[i]=res[i][0]; q[i]=res[i][1]; } return r; }

Compilation message (stderr)

sorting.cpp: In lambda function:
sorting.cpp:28:22: warning: conversion from 'std::vector<std::array<int, 2> >::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
   28 |         int sz=v.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...