結果
問題 | No.1036 Make One With GCD 2 |
ユーザー | Enjapma_kyopro |
提出日時 | 2020-06-01 16:47:07 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 946 ms / 2,000 ms |
コード長 | 3,794 bytes |
コンパイル時間 | 2,184 ms |
コンパイル使用メモリ | 181,572 KB |
実行使用メモリ | 19,432 KB |
最終ジャッジ日時 | 2024-09-16 14:23:59 |
合計ジャッジ時間 | 18,140 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 507 ms
19,428 KB |
testcase_01 | AC | 249 ms
19,308 KB |
testcase_02 | AC | 183 ms
19,432 KB |
testcase_03 | AC | 46 ms
10,348 KB |
testcase_04 | AC | 82 ms
16,616 KB |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | AC | 2 ms
5,376 KB |
testcase_07 | AC | 82 ms
10,728 KB |
testcase_08 | AC | 69 ms
10,088 KB |
testcase_09 | AC | 374 ms
19,176 KB |
testcase_10 | AC | 349 ms
18,540 KB |
testcase_11 | AC | 382 ms
19,176 KB |
testcase_12 | AC | 352 ms
18,796 KB |
testcase_13 | AC | 515 ms
18,864 KB |
testcase_14 | AC | 520 ms
18,920 KB |
testcase_15 | AC | 486 ms
18,536 KB |
testcase_16 | AC | 490 ms
18,664 KB |
testcase_17 | AC | 506 ms
18,924 KB |
testcase_18 | AC | 2 ms
5,376 KB |
testcase_19 | AC | 3 ms
5,376 KB |
testcase_20 | AC | 3 ms
5,376 KB |
testcase_21 | AC | 3 ms
5,376 KB |
testcase_22 | AC | 483 ms
18,404 KB |
testcase_23 | AC | 358 ms
16,616 KB |
testcase_24 | AC | 500 ms
18,668 KB |
testcase_25 | AC | 457 ms
18,152 KB |
testcase_26 | AC | 474 ms
18,280 KB |
testcase_27 | AC | 2 ms
5,376 KB |
testcase_28 | AC | 2 ms
5,376 KB |
testcase_29 | AC | 2 ms
5,376 KB |
testcase_30 | AC | 2 ms
5,376 KB |
testcase_31 | AC | 2 ms
5,376 KB |
testcase_32 | AC | 2 ms
5,376 KB |
testcase_33 | AC | 2 ms
5,376 KB |
testcase_34 | AC | 2 ms
5,376 KB |
testcase_35 | AC | 2 ms
5,376 KB |
testcase_36 | AC | 2 ms
5,376 KB |
testcase_37 | AC | 2 ms
5,376 KB |
testcase_38 | AC | 354 ms
19,432 KB |
testcase_39 | AC | 946 ms
19,432 KB |
testcase_40 | AC | 358 ms
16,616 KB |
testcase_41 | AC | 700 ms
19,304 KB |
testcase_42 | AC | 694 ms
19,300 KB |
testcase_43 | AC | 623 ms
19,304 KB |
testcase_44 | AC | 688 ms
19,432 KB |
ソースコード
#include <bits/stdc++.h> #include <unistd.h> #include <sys/time.h> #include <stdlib.h> using namespace std; typedef long long ll; typedef pair<ll,ll> P; typedef pair<P, ll> T; typedef pair<long double , ll> Ps; const ll INF = 2e18; const ll fact_table = 3200008; long double Pi = 3.1415926535897932384626; priority_queue <ll> pql; priority_queue <P> pqp; priority_queue <P> bag; //big priority queue priority_queue <ll,vector<ll>,greater<ll> > pqls; priority_queue <P,vector<P>,greater<P> > pqps; //small priority queue //top pop ll dx[8]={1,0,-1,0,1,1,-1,-1}; ll dy[8]={0,1,0,-1,1,-1,-1,1}; char dir[] = "DRUL"; //↓,→,↑,← #define endl "\n" #ifdef ENJAPMA #undef endl #endif #define p(x) cout<<x<<endl; #define el cout<<endl; #define pe(x) cout<<x<<" "; #define ps(x) cout<<fixed<<setprecision(25)<<x<<endl; #define pu(x) cout<<(x); #define pb push_back #define lb lower_bound #define ub upper_bound #define CLEAR(a) a = decltype(a)(); #define pc(x) cout << x << ","; #define rep(i, n) for (ll i = 0; i < (n); i ++) // const ll mod = 998244353ll; const ll mod = 1000000007ll; ll mypow(ll a, ll b, ll mod){ll x=1;while(b){while(!(b&1)){(a*=a)%=mod;b>>=1;}(x*=a)%=mod;b--;}return x;} void YES(bool cond){ if(cond){ p("YES");}else{ p("NO");} return;} void Yes(bool cond){ if(cond){ p("Yes");}else{ p("No");} return;} ll mygcd(ll a, ll b){ if (a < b) swap(a, b); if (a == b || b == 0) return a; return mygcd(b, a % b); } struct SegmentTree { //SegmentTree seg( vector<ll>(l + 5, INF) ); private: ll n; vector<ll> node; public: SegmentTree(vector<ll> v) { ll sz = v.size(); n = 1; while(n < sz) n *= 2; node.resize(2*n-1, INF); for(int i=0; i<sz; i++) node[i+n-1] = v[i]; for(int i=n-2; i>=0; i--) node[i] = mygcd(node[2*i+1], node[2*i+2]); } void update(ll x, ll val) { //a[x]をyに更新(小さい方に更新) x += (n - 1); node[x] = val; while(x > 0) { x = (x - 1) / 2; node[x] = mygcd(node[2*x+1], node[2*x+2]); } } ll getgcd(int a, int b, int k=0, int l=0, int r=-1){ // [a, b) の全てについて最大公約数をとる if (r < 0) r = n; if (r <= a || b <= l) return 0ll; if (a <= l && r <= b) return node[k]; ll vl = getgcd(a, b, 2*k+1, l, (l+r)/2); ll vr = getgcd(a, b, 2*k+2, (l+r)/2, r); return mygcd(vl, vr); } }; /* ll fact[fact_table + 5],rfact[fact_table + 5]; void c3_init(){ fact[0] = rfact[0] = 1; for(ll i=1; i<=fact_table; i++){ fact[i] = (fact[i-1]*i) % mod; } rfact[fact_table] = mypow(fact[fact_table],mod - 2, mod); for(ll i=fact_table; i>=1; i--){ rfact[i-1] = rfact[i] * i; rfact[i-1] %= mod; } return;} ll c3(ll n,ll r){ return (((fact[n] * rfact[r]) % mod ) * rfact[n-r]) % mod;} */ bool multicase = false; ll n,m,num,a,b,c,d,e,h,q; ll w, k, ans; ll x[500005], y[500005], z[500005]; ll dp[5005][5005]; string s; void solve(){ cin >> n; vector<ll> v; for(ll i=0;i<n;i++){ cin >> a; v.pb(a); } SegmentTree seg(v); ll ans = 0; ll ok = 0; ll right = 0; for(ll left = 0; left < n; left ++){ while(right < n && seg.getgcd(left, right + 1) != 1){ right ++; } ans += n - right; if (left == right) right ++; } p(ans); return; } int main(){ // init(); ios::sync_with_stdio(false); cin.tie(nullptr); ll q, testcase = 1; if(multicase){ cin >> q; }else{ q = 1; } while(q--){ // pu("Case ");pu("#");pu(testcase);pu(": "); solve(); testcase++; } // solve(); return 0; }