Submission #701354

#TimeUsernameProblemLanguageResultExecution timeMemory
701354thomasqmMatching (CEOI11_mat)C++17
92 / 100
1447 ms63676 KiB
#include <iostream> #include <fstream> #include <vector> #include <unordered_map> #include <numeric> #include <list> #include <array> #include <set> #include <map> #include <chrono> #include <stack> #include <random> #include <climits> #include <algorithm> #include <tgmath.h> using namespace std; #pragma GCC target ("avx2") #pragma GCC optimization ("O3") #pragma GCC optimization ("unroll-loops") int main() { unsigned n,m; cin>>n>>m; vector<unsigned> arr(n+m); for (unsigned i=0; i<n+m; i++) { unsigned x; cin>>x; if (i<n) arr[x-1]=i+1e9+1; else arr[i]=x; } vector<unsigned> z(m+n); z[0]=m+n; unsigned l=1, r=1; vector<unsigned> sorted_arr(n+m); for (unsigned i=0; i<n+m; i++) sorted_arr[i]=i; std::sort(sorted_arr.begin(), sorted_arr.end(), [&](unsigned a, unsigned b) {return arr[a]<arr[b];}); vector<unsigned> sorted_arr_inv(n+m); for (unsigned i=0; i<n+m; i++) sorted_arr_inv[sorted_arr[i]]=i; auto get = [](vector<unsigned>& tr, unsigned i) { uint64_t out=0; while (i!=-1u) { out += tr[i]; i=((i&(i+1)) - 1); } return out; }; auto up = [&](vector<unsigned>& tr, unsigned i, int add) { for (unsigned j=i; (j&(j+1))<=i && j<n+m; j=j|(j+1)) tr[j]+=add; }; vector<unsigned> sorted(n+m, 0), sorted_pre(n+m, 0); auto shift = [&]() { up(sorted, sorted_arr_inv[l], -1); up(sorted_pre, sorted_arr_inv[r-l-1], -1); l++; }; auto extend = [&]() { if (r==m+n) return false; unsigned x = get(sorted, sorted_arr_inv[r]), y=get(sorted_pre, sorted_arr_inv[r-l]); if (x!=y) return false; up(sorted, sorted_arr_inv[r], 1); up(sorted_pre, sorted_arr_inv[r-l], 1); r++; return true; }; for (unsigned i=1; i<m+n; i++) { if (i>=r || z[i-l]+1>=r-i) { while (l<i) shift(); while (extend()); z[i]=r-l; } else { z[i]=z[i-l]; } } vector<unsigned> out; for (unsigned i=n; i<m+n; i++) { if (z[i]>=n) out.push_back(i-n+1); } cout<<out.size()<<"\n"; for (unsigned i=0; i<out.size(); i++) cout<<out[i]<<(i<out.size()-1 ? " " : ""); cout<<"\n"; }

Compilation message (stderr)

mat.cpp:20: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
   20 | #pragma GCC optimization ("O3")
      | 
mat.cpp:21: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
   21 | #pragma GCC optimization ("unroll-loops")
      |
#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...
#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...