Submission #977544

#TimeUsernameProblemLanguageResultExecution timeMemory
9775448pete8Sirni (COCI17_sirni)C++17
140 / 140
1829 ms760908 KiB
#include<iostream> #include<stack> #include<map> #include<vector> #include<string> #include<unordered_map> #include <queue> #include<cstring> #include<limits.h> #include <cassert> #include<cmath> #include<set> #include<algorithm> #include <iomanip> #include<numeric> //gcd(a,b) #include<bitset> #include <cstdlib> #include <cstdint> using namespace std; #define ll long long #define f first //#define endl "\n" #define s second #define pii pair<int,int> #define ppii pair<int,pii> #define vi vector<int> #define pb push_back #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() #define F(n) for(int i=0;i<n;i++) #define lb lower_bound #define ub upper_bound #define fastio ios::sync_with_stdio(false);cin.tie(NULL); #pragma GCC optimize ("03,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") using namespace std; //#define int long long #define double long double const int mxn=1e5,inf=1e9,minf=-1e9,Mxn=1e7; vector<int>v; int p[mxn+10]; int mx=0; int find(int u){return (p[u]==u)?u:p[u]=find(p[u]);} bool merg(int a,int b){ a=find(a),b=find(b); if(a==b)return 0; p[a]=b; return 1; } //vector<pair<int,pii>>con; vector<pii>con[Mxn];//reduce 1 dimension? so keep only 2 value int32_t main(){ fastio int n;cin>>n; for(int i=0;i<n;i++){ int a;cin>>a; mx=max(mx,a); v.pb(a); } for(int i=0;i<n;i++)p[i]=i; sort(all(v)); ll ans=0; vector<int>bro(mx+1,-1);//1e7 v.erase(unique(all(v)),v.end()); for(int i=0;i<v.size();i++){ bro[v[i]]=i; if(i+1<v.size())con[v[i+1]%v[i]].pb({i,i+1}); } for(int i=mx-1;i>=0;i--)if(bro[i]==-1)bro[i]=bro[i+1]; for(int i=0;i<v.size();i++){ int x=v[i]; for(int j=x;j<=mx+1;j+=x)if(v[bro[j]]!=inf)con[v[bro[j]]%x].pb({i,bro[j]}); } for(int j=0;j<=mx;j++)for(auto i:con[j])if(merg(i.f,i.s))ans+=j; cout<<ans; return 0; } /* */

Compilation message (stderr)

sirni.cpp: In function 'int32_t main()':
sirni.cpp:65:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |  for(int i=0;i<v.size();i++){
      |              ~^~~~~~~~~
sirni.cpp:67:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   67 |   if(i+1<v.size())con[v[i+1]%v[i]].pb({i,i+1});
      |      ~~~^~~~~~~~~
sirni.cpp:70:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |  for(int i=0;i<v.size();i++){
      |              ~^~~~~~~~~
#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...