Submission #1041555

#TimeUsernameProblemLanguageResultExecution timeMemory
1041555vjudge1Tenis (COI19_tenis)C++17
51 / 100
1059 ms12500 KiB
#include <iostream> #include <vector> using namespace std; const int N = 1e5 + 10; vector<int> nei[N]; int a[N], b[N], c[N], ind1[N], ind2[N], ind3[N], Mn[N], seen[N]; void dfs(int u){ seen[u] = 1; for (int i : nei[u]) if (!seen[i]) dfs(i); } void solve1(int n, int m){ for (int i=n, mn = n + 1;i>=1;i--){ mn = min(mn, ind1[b[i]]); Mn[b[i]] = mn; } for (int i=n, mn = n + 1;i>=1;i--){ mn = min(mn, ind1[c[i]]); Mn[c[i]] = min(Mn[c[i]], mn); } // for (int i=1;i<=n;i++) // cout<<i<<" "<<Mn[i]<<'\n'; // exit(0); for (int i=1;i<=n;i++) nei[i].clear(), seen[i] = 0; for (int i=1;i<n;i++) nei[i+1].push_back(i); for (int i=1;i<=n;i++) if (Mn[i] < ind1[i]){ nei[Mn[i]].push_back(ind1[i]); // cout<<ind1[i]<<" "<<Mn[i]<<'\n'; } dfs(1); } int main(){ int n, m; cin>>n>>m; for (int i=1;i<=n;i++) cin>>a[i], ind1[a[i]] = i; for (int j=1;j<=n;j++) cin>>b[j], ind2[b[j]] = j; for (int k=1;k<=n;k++) cin>>c[k], ind3[c[k]] = k; int done = 0; while (m--){ int t,x, P, A, B; cin>>t; if (t == 2){ cin>>P>>A>>B; done = 0; if (P == 1){ a[ind1[A]] = B; a[ind1[B]] = A; swap(ind1[A], ind1[B]); } else if (P == 2){ b[ind2[A]] = B; b[ind2[B]] = A; swap(ind2[A], ind2[B]); } else{ c[ind3[A]] = B; c[ind3[B]] = A; swap(ind3[A], ind3[B]); } } else{ if (!done) solve1(n, m); done = 1; cin>>x; if (seen[ind1[x]]) cout<<"DA\n"; else cout<<"NE\n"; } } } /* 6 1 4 6 1 5 3 2 4 1 5 2 6 3 4 6 1 5 2 3 1 1 */
#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...