UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#215256#2643. gcda_sad_soul802871ms6120kbC++111.2kb2024-11-27 20:36:242024-11-27 23:38:36

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 5e5+10;
ll a[MAXN];
ll gcd(ll a,ll b){
	if(b==0)return a;
	return gcd(b,a%b);
}
struct node{
	int l,r;
	ll g;
}tree[MAXN<<2];
#define ls(p)(p<<1)
#define rs(p)(p<<1|1)
void build(int p,int l,int r){
	tree[p].l=l,tree[p].r=r;int mid=(l+r)>>1;
	if(l==r){
		tree[p].g=a[l];
		return ;
	}
	build(ls(p),l,mid),build(rs(p),mid+1,r);
	tree[p].g=gcd(tree[ls(p)].g,tree[rs(p)].g);
}
ll query(int p,int L,int R){
	int l=tree[p].l,r=tree[p].r,mid=(l+r)>>1;
	if(L<=l&&r<=R)return tree[p].g;
	if(L<=mid&&mid<R)return gcd(query(ls(p),L,R),query(rs(p),L,R));
	if(L<=mid)return query(ls(p),L,R);
	return query(rs(p),L,R);
}
int n,q;
int calc(int LL,int L,ll G){
	int l=L,r=n,re=0;
	while(l<=r){
		int mid=(l+r)>>1;
		if(query(1,LL,mid)==G)re=mid,l=mid+1;
		else r=mid-1;
	}
	return re;
}
map<ll,ll>ans;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;++i)scanf("%lld",&a[i]);
	build(1,1,n);
	for(int i=1;i<=n;++i){
		int r=i;
		while(r<=n){
			ll G=query(1,i,r);
			int nxt=calc(i,r,G);
			ans[G]+=nxt-r+1;
			r=nxt+1;
		}
	}
	scanf("%d",&q);
	while(q--){
		ll x;scanf("%lld",&x);
		printf("%lld\n",ans[x]);
	}
	return 0;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 53ms
memory: 1316kb

input:

1071
546 2340 8190 420 6300 1050 40950 25 23400 195 2340 630 195 40950 2184 504 525 130 2340 1800 39...

output:

29
568770
132
197
63
84
197
63
1099
568770
29
164
22
113
197
84
1099
568770
197
197
568770
716
132
6...

result:

ok 253041 lines

Test #2:

score: 10
Accepted
time: 80ms
memory: 1396kb

input:

2878
728 50 420 4200 25 200 4 81900 546 195 11700 900 900 42 1092 520 6 36 6552 150 18200 130 585 28...

output:

183
440
521
100
3619
1310
183
201
100
521
100
468
129
331
468
4128473
100
440
183
4128473
4128473
13...

result:

ok 278290 lines

Test #3:

score: 10
Accepted
time: 67ms
memory: 1328kb

input:

1685
1365 225 40 9 3900 3900 2100 105 120 25 8 2184 2184 10 2100 23400 780 600 325 32760 4680 260 39...

output:

1412451
1545
220
47
925
1412451
1412451
925
90
330
220
196
90
815
94
92
90
1412451
92
248
815
248
81...

result:

ok 253539 lines

Test #4:

score: 10
Accepted
time: 82ms
memory: 1400kb

input:

3492
1820 9100 45 8190 72 50 3276 260 14 8 24 65 910 5850 150 520 23400 520 700 2730 300 72 728 70 2...

output:

1954
1954
1940
2980
165
565
165
135
538
2980
569
1954
6081994
2980
165
178
1954
569
422
569
1954
538...

result:

ok 278788 lines

Test #5:

score: 10
Accepted
time: 985ms
memory: 4116kb

input:

65614
4680 3900 2340 6825 5 1560 780 12600 75 140 156 50 3276 182 315 52 5460 40950 20475 14 78 2340...

output:

10574
1873
1873
10249
3685
3735
10249
2152307887
10249
10249
1873
7058
10261
3672
2152307887
10249
1...

result:

ok 288360 lines

Test #6:

score: 0
Time Limit Exceeded

input:

99228
11700 1400 35 1260 2520 975 56 100 18200 468 20 1560 450 900 36 468 9 4 56 650 195 3 468 4680 ...

output:


result:


Test #7:

score: 10
Accepted
time: 361ms
memory: 2476kb

input:

26035
39 900 315 1400 130 2600 7800 4095 234 36 200 25 312 1092 252 780 90 23400 1 4680 104 2 54600 ...

output:

13708
638
4405
4405
4175
4405
1333
4238
638
13173
4238
2712
1360
1333
4405
13173
4175
4405
2712
2712...

result:

ok 280460 lines

Test #8:

score: 10
Accepted
time: 642ms
memory: 3632kb

input:

42842
468 325 390 1 120 150 6552 60 840 780 7800 126 35 140 40950 81900 6300 75 1050 210 6300 700 45...

output:

6626
2410
7045
917526742
2410
2354
917526742
4904
2354
2456
917526742
917526742
7148
2354
7045
7148
...

result:

ok 255709 lines

Test #9:

score: 0
Time Limit Exceeded

input:

76456
8190 700 32760 27300 2100 24 3 126 1820 150 280 9100 104 3900 520 27300 65 1638 4095 273 450 1...

output:


result:


Test #10:

score: 10
Accepted
time: 601ms
memory: 6120kb

input:

100000
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2...

output:

5000050000
5000050000
5000050000
5000050000
5000050000
5000050000
5000050000
5000050000
5000050000
5...

result:

ok 300000 lines