Submission #318019

# Submission time Handle Problem Language Result Execution time Memory
318019 2020-10-31T08:46:28 Z lukameladze Sorting (IOI15_sorting) C++14
0 / 100
1 ms 384 KB
# include <bits/stdc++.h>
using namespace std;
long long  xx,idx[300005],a1[300005],a[300005],n,m,X[300005],Y[300005],a3[300005],ww,le,ri,mid,a2[300005],anss;
vector < pair < long long, long long > > v,ans,ans1;
void swapp(int idx1, int idx2)
{
     idx[a1[idx1]]=idx2;
     idx[a1[idx2]]=idx1;
     swap(a1[idx1],a1[idx2]);
}
void swapp1(int idx1, int idx2)
{
     idx[a[idx1]]=idx2;
     idx[a[idx2]]=idx1;
     swap(a[idx1],a[idx2]);
}
int findSwapPairs(int N, int A[], int M, int x[], int y[], int P[], int Q[]) 
{
	for (int i=1; i<=n; i++)
	{
		a2[i]=A[i-1];
	}
	for (int i=1; i<=m; i++)
	{
		X[i]=x[i-1];
		Y[i]=y[i-1];
	}
    for (int i=1; i<=n; i++)
    {
         a1[i]=a2[i];
         a3[i]=a2[i];
    }
    sort(a3+1, a3+n+1);
    for (int i=1; i<=n; i++)
    {
        if(a3[i]!=a2[i]) ww=1;
    }
    if (!ww)
    {
        return 0;
    }
    le=1;
    ri=m;
    while(le<=ri)
    {
        ans.clear();
        v.clear();
        mid=(le+ri)/2;
        for (int i=1; i<=n; i++)
        {
	        a1[i]=a2[i];
	        a[i]=a2[i];
        }
         for (int i=1; i<=mid; i++)
         {
              swap(a1[X[i]], a1[Y[i]]);
         }
         for (int i=1; i<=n; i++)
         {
              idx[a1[i]]=i;
         }
         for (int i=1; i<=n; i++)
         {
              if (idx[i]!=i)
              {
                   v.push_back({i, a1[i]});
              }
              swapp(idx[a1[i]], idx[i]);
         }
         if (v.size()>mid)
         {
             le=mid+1;
             continue;
        }
         for (int i=1; i<=n; i++)
         {
              idx[a[i]]=i;
         }
         for (int i=1; i<=mid; i++)
         {
              swapp1(X[i],Y[i]);
              xx=v.size();
              if (i<=xx)
              {
	              ans.push_back({idx[v[i-1].first], idx[v[i-1].second]}),
	              swapp1(idx[v[i-1].first],idx[v[i-1].second]);
              }
         }
        if (v.size()<=mid)
         {
             anss=mid;
             ri=mid-1;
             ans1.clear();
             for (int j=0; j<ans.size(); j++)
             {
                 ans1.push_back({ans[j].first, ans[j].second});
            }
        }
    }
    //cout<<anss<<endl;
    if (anss>ans1.size()) ans1.push_back({1,1});
    
    for (int i=0; i<ans1.size(); i++)
    {
    		P[i]=ans1[i].first-1;
    		Q[i]=ans1[i].second-1;
        //cout<<ans1[i].first<<" "<<ans1[i].second<<endl;
    }return ans1.size();
}

Compilation message

sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:68:30: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   68 |               swapp(idx[a1[i]], idx[i]);
      |                     ~~~~~~~~~^
sorting.cpp:68:38: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   68 |               swapp(idx[a1[i]], idx[i]);
      |                                 ~~~~~^
sorting.cpp:70:22: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   70 |          if (v.size()>mid)
      |              ~~~~~~~~^~~~
sorting.cpp:81:25: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   81 |               swapp1(X[i],Y[i]);
      |                      ~~~^
sorting.cpp:81:30: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   81 |               swapp1(X[i],Y[i]);
      |                           ~~~^
sorting.cpp:86:39: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   86 |                swapp1(idx[v[i-1].first],idx[v[i-1].second]);
      |                       ~~~~~~~~~~~~~~~~^
sorting.cpp:86:58: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   86 |                swapp1(idx[v[i-1].first],idx[v[i-1].second]);
      |                                         ~~~~~~~~~~~~~~~~~^
sorting.cpp:89:21: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   89 |         if (v.size()<=mid)
      |             ~~~~~~~~^~~~~
sorting.cpp:94:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   94 |              for (int j=0; j<ans.size(); j++)
      |                            ~^~~~~~~~~~~
sorting.cpp:101:13: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  101 |     if (anss>ans1.size()) ans1.push_back({1,1});
      |         ~~~~^~~~~~~~~~~~
sorting.cpp:103:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  103 |     for (int i=0; i<ans1.size(); i++)
      |                   ~^~~~~~~~~~~~
sorting.cpp:105:25: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  105 |       P[i]=ans1[i].first-1;
sorting.cpp:106:26: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  106 |       Q[i]=ans1[i].second-1;
sorting.cpp:108:22: warning: conversion from 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
  108 |     }return ans1.size();
      |             ~~~~~~~~~^~
sorting.cpp:17:23: warning: unused parameter 'N' [-Wunused-parameter]
   17 | int findSwapPairs(int N, int A[], int M, int x[], int y[], int P[], int Q[])
      |                   ~~~~^
sorting.cpp:17:39: warning: unused parameter 'M' [-Wunused-parameter]
   17 | int findSwapPairs(int N, int A[], int M, int x[], int y[], int P[], int Q[])
      |                                   ~~~~^
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Incorrect 1 ms 364 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Incorrect 1 ms 364 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Incorrect 1 ms 384 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Incorrect 1 ms 364 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 364 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 364 KB Output isn't correct
2 Halted 0 ms 0 KB -