QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#268444 | #7749. A Simple MST Problem | qkm66666 | TL | 986ms | 209628kb | C++17 | 4.2kb | 2023-11-28 17:34:09 | 2023-11-28 17:34:10 |
Judging History
answer
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cassert>
#include<cstdio>
#include<cctype>
#include<vector>
#include<bitset>
#include<random>
#include<ctime>
#include<queue>
#include<cmath>
#include<list>
#include<map>
#include<set>
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define pll pair<long long,long long>
#define FF fflush(stdout)
#define inf 0x3f3f3f3f
#define endl "\n"
#define fi first
#define se second
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
//char buf[1<<20],*p1,*p2;
//#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?EOF:*p1++)
inline int read()
{
int s=0,f=1;
char x=getchar();
while(!isdigit(x))f=(x=='-'?-1:1),x=getchar();
while(isdigit(x))s=s*10+x-'0',x=getchar();
return s*f;
}
// const int p=1e9+7;
//ll ksm(int a,int b){ll ans=1,bs=a;while(b){if(b&1)ans=ans*bs%p;bs=bs*bs%p;b>>=1;}return ans;}
mt19937 rd(time(0));
#define reaD read
vector<int> d[1000005];
int dd[1000005];
vector<int> df[1000005];
int mx[1000005],mi[1000005];
bool isp[1000005];
int f[1000005];
int fd(int x)
{
return x==f[x]?x:f[x]=fd(f[x]);
}
int mg(int x,int y)
{
x=fd(x),y=fd(y);
if(x==y)return 0;
if(d[y].size()>d[x].size())
f[y]=x;
else f[x]=y;
return 1;
}
bool occ[1000005];
int cal(int x,int y)
{
int ans=d[x].size();
for(auto i:d[x])
occ[i]=1;
for(auto i:d[y])
if(!occ[i])ans++;
for(auto i:d[x])
occ[i]=0;
return ans;
}
void bf(int l,int r)
{
vector<pair<int,pii> > e;
for(int i=l;i<=r;i++)
for(int j=i+1;j<=r;j++)
{
e.pb(mp(cal(i,j),mp(i,j)));
}
sort(e.begin(),e.end());
int ans=0;
for(auto i:e)
{
int v=i.fi,x=i.se.fi,y=i.se.se;
if(mg(x,y))ans+=v;
}
printf("%d\n",ans);
return ;
// return ans;
}
//map<vector<int>,int> M;
int id[1000005];
int pri[1000005];
int tot=0;
void dfs(int x,int n,int s)
{
// if(s>mx[x])return ;
if(n==d[x].size())
{
if(s<x)mi[x]=max(mi[x],s);
if(s>x)mx[x]=min(mx[x],s);
return ;
}
ll now=1;
for(int i=0;;i++)
{
if(s*now>1000000||s*now>mx[x])break;
dfs(x,n+1,s*now);
now*=d[x][n];
}
}
int main()
{
for(int i=2;i<=1000000;i++)
if(!d[i].size())
{
isp[i]=1;
pri[++tot]=i;
for(int j=i;j<=1000000;j+=i)
d[j].pb(i);
}
for(int i=1;i<=1000000;i++)
for(int j=i;j<=1000000;j+=i)
df[j].pb(i);
for(int i=1;i<=1000000;i++)
{
ll s=1;
for(auto j:d[i])s*=j;
for(auto j:df[s])
mi[i]=max(mi[i],dd[j]);
dd[s]=i;
}
for(int i=1;i<=1000000;i++)
dd[i]=1e9;
for(int i=1000000;i>=1;i--)
{
ll s=1;
for(auto j:d[i])s*=j;
mx[i]=1e9;
for(auto j:df[s])
mx[i]=min(mx[i],dd[j]);
dd[s]=i;
}
// for(int i=1;i<=1000000;i++)
{
// mx[i]=1000000;
// if(i>1)mx[i]=min(1000000,i*d[i][0]);
// dfs(i,0,1);//cout<<mx[i]<<" ";
}
int T=reaD();
while(T--)
{
int l=reaD(),r=reaD();
if(l==1)
{
int ans=0;
for(int i=2;i<=r;i++)
ans+=d[i].size();
printf("%d\n",ans);
continue;
}
int ok=0;
for(int i=l;i<=r;i++)
if(isp[i])ok=i;
for(int i=l;i<=r;i++)
f[i]=i;
if(!ok)
{
bf(l,r);
continue;
}
vector<pair<int,pii> > e;
int ans=0;
for(int i=l;i<=r;i++)
{
if(mi[i]>=l)e.pb(mp(d[i].size(),mp(mi[i],i)));
if(mx[i]<=r)e.pb(mp(d[i].size(),mp(i,mx[i])));
}
for(int i=l;i<=r;i++)
if(i!=ok)
{
e.pb(mp(d[i].size()+1,mp(i,ok)));
}
sort(e.begin(),e.end());
for(auto i:e)
{
int v=i.fi,x=i.se.fi,y=i.se.se;
if(mg(x,y))ans+=v;
}
printf("%d\n",ans);
}
// system("pause");
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 820ms
memory: 189476kb
input:
5 1 1 4 5 1 4 1 9 19 810
output:
0 2 3 9 1812
result:
ok 5 lines
Test #2:
score: 0
Accepted
time: 774ms
memory: 191820kb
input:
2 27 30 183704 252609
output:
8 223092
result:
ok 2 lines
Test #3:
score: 0
Accepted
time: 815ms
memory: 191752kb
input:
1 183704 252609
output:
223092
result:
ok single line: '223092'
Test #4:
score: 0
Accepted
time: 896ms
memory: 200196kb
input:
2 639898 942309 30927 34660
output:
983228 11512
result:
ok 2 lines
Test #5:
score: 0
Accepted
time: 911ms
memory: 202848kb
input:
3 21731 33468 46192 370315 1712 3753
output:
34608 948775 5299
result:
ok 3 lines
Test #6:
score: 0
Accepted
time: 831ms
memory: 195152kb
input:
4 15237 67700 10918 86104 98287 116980 17432 23592
output:
148811 210927 60893 18687
result:
ok 4 lines
Test #7:
score: 0
Accepted
time: 961ms
memory: 205976kb
input:
5 5594 70302 19202 69588 5634 7877 59821 469300 97439 261121
output:
179735 145706 6565 1203684 488669
result:
ok 5 lines
Test #8:
score: 0
Accepted
time: 945ms
memory: 202324kb
input:
6 43477 229639 188276 269887 72424 150178 9009 36918 137421 180271 14666 124530
output:
541705 255651 232054 77284 135277 313203
result:
ok 6 lines
Test #9:
score: 0
Accepted
time: 890ms
memory: 197208kb
input:
7 461436 501798 98856 148334 20953 119408 910 5027 762 14117 10959 46088 96149 130311
output:
139017 151124 281536 10504 34818 98004 108375
result:
ok 7 lines
Test #10:
score: 0
Accepted
time: 986ms
memory: 209628kb
input:
8 6448 11162 33691 94044 137536 140277 106719 267437 13494 38185 3185 4173 4835 299526 25162 43201
output:
13177 175485 9711 480992 69059 2808 840950 53422
result:
ok 8 lines
Test #11:
score: 0
Accepted
time: 937ms
memory: 196848kb
input:
9 4136 54985 38425 155322 107602 157683 115533 137627 13677 44903 43432 69310 70004 129314 43033 55373 76424 147123
output:
139668 339337 153266 68520 87592 76612 183238 39109 211339
result:
ok 9 lines
Test #12:
score: 0
Accepted
time: 936ms
memory: 202872kb
input:
10 21662 27103 55634 196143 20466 44902 87028 202799 127745 151602 1598 1679 95299 126981 13367 134183 52307 66285 10136 38071
output:
17117 410126 71979 344673 74754 263 100586 342577 41870 77522
result:
ok 10 lines
Test #13:
score: 0
Accepted
time: 942ms
memory: 199784kb
input:
20 14973 29525 12674 35281 27500 64458 67431 109122 12468 19466 4606 9884 38731 44161 3212 89277 23213 37134 4392 40769 5378 7211 22586 29237 56331 81369 43924 59554 31787 34990 19949 21972 47309 65085 5666 48185 99 2714 7969 131566
output:
40882 63073 107649 129480 19975 14563 17562 238237 41056 99346 5358 20747 73854 48244 9911 6517 54866 117382 6374 347901
result:
ok 20 lines
Test #14:
score: 0
Accepted
time: 916ms
memory: 193824kb
input:
30 11101 53557 6079 6241 869 14433 6164 10602 73432 82272 15845 17496 18885 49518 12127 35037 5812 14898 12225 15757 19736 36027 34506 69210 12204 37099 642 1256 11875 12382 169453 211949 20884 26173 8302 26634 75302 79147 13938 16896 11229 13736 4753 7575 2742 17752 4443 5021 2988 5533 1042 1364 19...
output:
118619 538 35473 12392 28768 4915 88426 63728 25217 10666 47893 102086 69488 1584 1669 135374 16581 50701 12720 8517 7762 8170 40235 1798 7014 936 78143 29 32461 19423
result:
ok 30 lines
Test #15:
score: 0
Accepted
time: 980ms
memory: 193172kb
input:
40 1022 1378 14032 55415 12506 15792 3919 16767 12870 32763 10624 12091 1144 29449 5184 9133 4178 8021 7785 13966 3880 26749 15390 34240 2582 11246 431 4695 7020 28894 14092 27156 52666 55295 4068 22068 7392 11533 18273 31481 18854 47481 7786 39812 7341 24968 22021 54790 3221 10332 4930 37633 4407 1...
output:
959 116367 9946 34920 55460 4626 75707 10961 11069 17829 62128 52987 23362 10769 60198 36594 9093 48818 11976 39528 82591 88609 48598 96601 19475 89551 19435 27135 16967 139445 1063 181709 57729 6335 4114 5586 5189 5669 59793 8451
result:
ok 40 lines
Test #16:
score: -100
Time Limit Exceeded
input:
50 15626 23807 5585 6016 6101 8103 9127 21310 36189 45079 14069 28358 4793 6034 4029 8938 35309 95923 43860 65991 3472 11896 13230 36032 11979 20636 2432 24320 1680 8915 2612 5242 9797 10319 2232 9531 24754 30470 41799 71066 9681 10551 434 2733 8898 28848 2033 35179 8338 13387 1547 5093 1840 3757 47...
output:
23466 1386 5889 33690 28343 40048 3754 13493 176378 65680 23137 63701 24080 59083 18974 7221 1739 19409 17905 86553 2807 5709 55079 89488 15241 9203 4985 12067 5112 815 36773 6032 21936 48301 14796 43205 40728 1000 10389 346 16233 134 5168 54990 5999 25607 7930 9444 25040 30739