P1414-又是毕业季II
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 typedef double db; 5 #define INF 0x3f3f3f3f 6 #define _for(i,a,b) for(int i = (a);i < b;i ++) 7 #define _rep(i,a,b) for(int i = (a);i > b;i --) 8 9 inline ll read() 10 { 11 ll ans = 0; 12 char ch = getchar(), last = ' '; 13 while(!isdigit(ch)) last = ch, ch = getchar(); 14 while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar(); 15 if(last == '-') ans = -ans; 16 return ans; 17 } 18 inline void write(ll x) 19 { 20 if(x < 0) x = -x, putchar('-'); 21 if(x >= 10) write(x / 10); 22 putchar(x % 10 + '0'); 23 } 24 25 int n; 26 int a[10005]; 27 int Log[1000005]; 28 int f[10005]; 29 int main() 30 { 31 32 n = read(); 33 _for(i,1,n+1) 34 a[i] = read(); 35 36 37 map<int,int> m; 38 _for(i,1,n+1) 39 for(int j = 1;j * j <= a[i];j ++) 40 if(a[i]%j==0) 41 { 42 m[j] ++; 43 if(a[i]/j!=j) 44 m[a[i]/j] ++; 45 } 46 47 for(auto p:m) 48 if(p.first>f[p.second]) 49 f[p.second] = p.first; 50 51 f[n] = max(f[n],1); 52 _rep(i,n,0) 53 f[i] = max(f[i],f[i+1]); 54 55 _for(i,1,n+1) 56 { 57 write(f[i]); 58 printf("\n"); 59 } 60 return 0; 61 }