Submission #882252

#TimeUsernameProblemLanguageResultExecution timeMemory
882252boyliguanhanSirni (COCI17_sirni)C++17
140 / 140
785 ms521392 KiB
#include<bits/stdc++.h> using namespace std; #pragma GCC optimize(2) #define N 10000001 int nxt[N], p[100100],pa[N],vis[N],n,mx,ans; vector<pair<int,int>> edges[N]; int abp(int n) { return (pa[n]?pa[n]=abp(pa[n]):n); } bool un(int a, int b) { a=abp(a); b=abp(b); if(a==b) return 0; pa[a]=b; return 1; } int main() { cin.sync_with_stdio(false); cin.tie(nullptr); cin >> n; for(int i = 1; i <= n; i++) cin >> p[i], mx=max(mx,nxt[p[i]]=p[i]); for(int i = mx; i--;) if(!nxt[i]) nxt[i]=nxt[i+1]; for(int i = 1; i <= mx; i++) if(nxt[i]==i&&(vis[i]^(vis[i]=1))) for(int j = i; j <= mx; vis[j]=1,j+=i){ if(nxt[j]==j) edges[0].push_back({i,j}); if(nxt[j+1]) edges[nxt[j+1]%i].push_back({i,nxt[j+1]}); } for(int i = 0; i<=5e6; i++) for(auto [u,v]: edges[i]) if(un(u,v)) ans+=i; cout << ans << '\n'; }

Compilation message (stderr)

sirni.cpp: In function 'int main()':
sirni.cpp:28:38: warning: operation on 'vis[i]' may be undefined [-Wsequence-point]
   28 |         if(nxt[i]==i&&(vis[i]^(vis[i]=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...
#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...