UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#213538#2770. 子序列WZRYWZWY203411ms88152kbC++111.6kb2024-11-12 20:25:092024-11-12 23:29:23

answer

//呃呃呃,为什么打不开codeforces别人的代码啊www,甚至打开了个韩国网站也打不开……最后找了半天终于找到了题解 ,我太难了
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=2e5+5,maxm=25,mod=1e9+7;

struct NODE{ int x,y,id; };
vector<NODE>q;
int m,a[maxn],ans[maxn];
ll f[maxn][maxm],f2[maxn][maxm];
void Solve(int l,int r,vector<NODE>q){
	if(l>r) return;
	if(l==r){
		for(int i=0;i<q.size();i++){
			if(!a[l]) ans[q[i].id]=2;
			else ans[q[i].id]=1;
		}
		return;
	}
	int mid=(l+r)>>1;
	for(int i=l;i<=r;i++)
		for(int j=0;j<m;j++)
			f[i][j]=f2[i][j]=0;
	f[mid+1][0]=1;
	for(int i=mid;i>=l;i--)//从 mid 往左DP
		for(int j=0;j<m;j++)
			f[i][j]=(f[i+1][j]+f[i+1][(j-a[i]+m)%m])%mod;
	f2[mid][0]=1;
	for(int i=mid+1;i<=r;i++)//从 mid+1 往右DP
		for(int j=0;j<m;j++)
			f2[i][j]=(f2[i-1][j]+f2[i-1][(j-a[i]+m)%m])%mod;
	vector<NODE>ql,qr;
	for(int i=0;i<q.size();i++){
		if(q[i].x<=mid&&q[i].y>mid){//处理这一层跨过 mid 的询问
			for(int j=0;j<m;j++)
				(ans[q[i].id]+=f[q[i].x][j]*f2[q[i].y][(m-j)%m]%mod)%=mod;
		}
		else if(q[i].y<=mid) ql.push_back(q[i]);
		else qr.push_back(q[i]);
	}
	Solve(l,mid,ql);
	Solve(mid+1,r,qr);
}

int main(){
	cin.tie(0) ; ios::sync_with_stdio(0);
	int n; cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		a[i]%=m;
	}
	int qt; cin>>qt;
	for(int i=1,x,y;i<=qt;i++){
		cin>>x>>y;
		q.push_back({x,y,i});
	}
	Solve(1,n,q);
	for(int i=1;i<=qt;i++)
		cout<<ans[i]<<"\n";
	return 0;
}

//https://blog.csdn.net/weixin_75161465/article/details/142733157

详细

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

Test #1:

score: 4
Accepted
time: 0ms
memory: 1284kb

input:

10 20
7 5 5 1 7 13 19 10 2 7
10
10 10
6 7
6 8
4 10
8 9
5 8
6 10
5 5
2 6
6 8

output:

1
1
1
9
1
2
2
1
2
1

result:

ok 10 lines

Test #2:

score: 4
Accepted
time: 0ms
memory: 1288kb

input:

10 20
15 0 15 10 6 18 1 13 3 1
10
1 2
4 9
3 7
4 8
6 10
2 3
1 4
2 5
2 9
5 9

output:

2
4
2
2
2
2
4
2
12
3

result:

ok 10 lines

Test #3:

score: 4
Accepted
time: 0ms
memory: 1288kb

input:

10 20
8 9 17 13 10 13 16 11 19 3
10
6 9
3 9
2 6
1 10
5 10
6 10
4 5
2 4
10 10
3 5

output:

2
9
3
56
4
2
1
1
1
2

result:

ok 10 lines

Test #4:

score: 4
Accepted
time: 0ms
memory: 1284kb

input:

10 20
12 8 11 1 0 3 2 3 19 17
10
5 7
1 3
1 10
2 6
4 10
5 9
5 9
3 10
4 8
4 8

output:

2
2
52
4
14
2
2
16
2
2

result:

ok 10 lines

Test #5:

score: 4
Accepted
time: 1ms
memory: 1288kb

input:

10 20
7 0 2 2 8 12 10 7 1 2
10
9 9
6 9
3 7
3 8
1 6
2 4
6 8
4 5
1 6
8 9

output:

1
2
4
4
4
2
1
1
4
1

result:

ok 10 lines

Test #6:

score: 0
Wrong Answer
time: 0ms
memory: 1332kb

input:

100 20
3 15 11 17 7 9 16 11 6 0 1 1 19 15 18 0 14 12 17 9 19 12 18 9 4 14 11 5 18 10 4 18 14 8 14 8 ...

output:

2
3
52430
2
989896037
1677704
928507060
748745265
107374112
994948534
186027267
104768
1639
71798680...

result:

wrong answer 5th lines differ - expected: '6597996', found: '989896037'

Test #7:

score: 0
Wrong Answer
time: 0ms
memory: 1328kb

input:

100 20
3 7 17 4 9 6 6 15 18 1 3 5 19 13 2 7 9 10 4 5 0 10 18 18 6 0 1 15 16 12 2 7 6 0 17 2 14 18 4 ...

output:

3355488
198
229097541
233638189
753021964
6710976
7
106
8
1677728
6
654999402
1
382278150
802241222
...

result:

wrong answer 3rd lines differ - expected: '146407370', found: '229097541'

Test #8:

score: 0
Wrong Answer
time: 0ms
memory: 1328kb

input:

100 20
1 11 5 10 8 2 11 14 2 11 7 4 13 4 2 1 13 4 0 13 4 8 3 12 12 17 12 13 16 2 5 12 13 0 5 11 0 7 ...

output:

959584127
10
307958989
307991757
331762287
409
5
214748032
1677728
307273363
307280531
848
2
9949482...

result:

wrong answer 1st lines differ - expected: '26391984', found: '959584127'

Test #9:

score: 0
Wrong Answer
time: 0ms
memory: 1332kb

input:

100 20
8 18 4 8 11 9 1 19 7 14 7 13 4 3 14 0 10 3 13 16 2 5 17 18 7 10 7 3 19 1 16 18 7 13 19 13 2 1...

output:

804
29
26228
214748368
26
406
951162373
107374200
3276
214748736
979792179
102
209724
3355344
419461...

result:

wrong answer 7th lines differ - expected: '144284306', found: '951162373'

Test #10:

score: 0
Wrong Answer
time: 0ms
memory: 1328kb

input:

100 20
17 1 13 11 0 8 12 2 4 15 14 18 6 6 5 16 18 4 6 19 4 0 4 6 10 19 5 4 18 17 14 16 3 0 1 6 2 4 0...

output:

413130607
107374192
743898405
52
3355432
871941334
396
979792067
1
218591847
609295991
8
929408180
4...

result:

wrong answer 1st lines differ - expected: '107223667', found: '413130607'

Test #11:

score: 0
Wrong Answer
time: 0ms
memory: 1736kb

input:

1000 20
7 14 19 15 16 8 19 15 5 5 6 3 4 16 0 1 7 6 14 3 12 2 4 5 16 12 12 8 1 9 6 13 4 10 12 16 11 7...

output:

555495994
29986721
558307492
188353444
757478412
540113850
651478136
419213244
902324019
273622387
2...

result:

wrong answer 1st lines differ - expected: '339309012', found: '555495994'

Test #12:

score: 0
Wrong Answer
time: 3ms
memory: 1736kb

input:

1000 20
16 7 12 15 13 10 8 1 14 16 13 6 16 7 4 11 0 17 6 3 4 8 17 10 3 11 18 13 17 19 15 4 7 17 12 4...

output:

12
707769269
959779170
809013193
157903497
999820507
52381
159477112
258094533
571371796
435481815
2...

result:

wrong answer 2nd lines differ - expected: '484141516', found: '707769269'

Test #13:

score: 0
Wrong Answer
time: 2ms
memory: 1732kb

input:

1000 20
7 7 16 0 12 6 11 3 7 16 12 11 1 7 17 0 11 8 14 17 8 17 7 18 1 11 14 0 6 5 10 0 12 15 1 4 5 1...

output:

91449971
653643341
305784973
951161605
823884729
896221428
432702840
867806685
570467708
153100883
1...

result:

wrong answer 1st lines differ - expected: '425631668', found: '91449971'

Test #14:

score: 0
Wrong Answer
time: 0ms
memory: 1728kb

input:

1000 20
19 3 14 11 9 17 18 4 11 5 0 18 2 11 13 12 8 10 15 19 12 9 2 15 5 19 14 17 17 7 18 5 2 8 5 0 ...

output:

848568579
716838348
716480701
74696958
108294201
270086261
585702235
447037872
497420000
826800170
2...

result:

wrong answer 1st lines differ - expected: '778881096', found: '848568579'

Test #15:

score: 0
Wrong Answer
time: 1ms
memory: 1732kb

input:

1000 20
16 19 4 2 2 19 19 5 11 4 16 7 17 6 11 11 7 10 6 3 15 1 11 12 5 11 12 13 3 10 12 2 19 9 4 8 6...

output:

508457862
519458178
606783924
882261184
633963122
692542977
113180717
554706981
551358430
214722994
...

result:

wrong answer 1st lines differ - expected: '137484337', found: '508457862'

Test #16:

score: 0
Wrong Answer
time: 23ms
memory: 5564kb

input:

10000 20
12 8 12 19 9 19 1 10 19 11 12 10 19 5 0 16 17 1 9 18 18 13 6 0 14 16 6 6 3 6 17 2 13 19 13 ...

output:

145313515
971058688
425908029
477541288
78058056
420719171
880418794
650899087
610958668
447989719
8...

result:

wrong answer 1st lines differ - expected: '874193350', found: '145313515'

Test #17:

score: 0
Wrong Answer
time: 22ms
memory: 5596kb

input:

10000 20
8 15 6 17 5 13 11 1 7 9 16 16 15 12 4 19 18 2 3 10 13 15 12 5 3 6 15 2 0 11 8 19 13 18 12 1...

output:

386445903
522989898
582213755
660445707
488778454
422657491
97500769
331087127
222791185
140366727
9...

result:

wrong answer 1st lines differ - expected: '11498054', found: '386445903'

Test #18:

score: 0
Wrong Answer
time: 27ms
memory: 5560kb

input:

10000 20
0 9 6 6 17 19 11 13 18 14 0 10 3 0 0 11 12 11 2 19 18 12 13 16 8 7 14 12 10 2 7 3 4 18 10 1...

output:

843235401
423802516
523426547
449795089
820436070
486525233
612812342
44961489
302770349
530265420
1...

result:

wrong answer 1st lines differ - expected: '963045808', found: '843235401'

Test #19:

score: 0
Wrong Answer
time: 24ms
memory: 5556kb

input:

10000 20
5 13 8 2 2 13 16 17 9 8 15 10 1 12 2 18 19 1 0 17 9 7 16 14 0 9 19 14 13 3 19 17 5 3 19 17 ...

output:

697622151
52368562
768588745
608172383
82610217
306468468
280613485
671673135
257860501
928568483
66...

result:

wrong answer 1st lines differ - expected: '875247851', found: '697622151'

Test #20:

score: 0
Wrong Answer
time: 21ms
memory: 5560kb

input:

10000 20
5 8 19 15 4 8 12 14 4 5 16 13 17 9 3 3 15 4 15 19 17 8 14 16 16 13 19 18 19 7 13 5 11 11 12...

output:

48
745715122
360105782
722650678
6767925
46674148
443658305
897011648
677102208
206057722
381146303
...

result:

wrong answer 2nd lines differ - expected: '749885568', found: '745715122'

Test #21:

score: 0
Wrong Answer
time: 576ms
memory: 87884kb

input:

200000 20
11 5 3 3 2 9 10 10 15 4 19 1 3 0 19 19 15 0 0 12 14 16 1 8 3 18 10 6 14 11 2 7 17 2 0 1 12...

output:

573102532
865999616
104415303
151473615
467501397
399982987
413911681
611764003
252749249
889994675
...

result:

wrong answer 1st lines differ - expected: '57545307', found: '573102532'

Test #22:

score: 0
Wrong Answer
time: 591ms
memory: 87888kb

input:

200000 20
13 15 5 3 2 0 3 4 6 16 14 0 4 11 8 10 18 5 3 12 1 7 2 16 13 19 16 16 3 16 6 8 2 6 10 0 13 ...

output:

675374851
524713685
174053372
259196432
733013133
583357996
931612012
809714916
55870068
609640803
7...

result:

wrong answer 1st lines differ - expected: '110393808', found: '675374851'

Test #23:

score: 0
Wrong Answer
time: 615ms
memory: 88152kb

input:

200000 20
15 8 8 12 19 10 4 14 16 6 3 17 13 4 14 17 5 15 19 4 0 3 17 5 4 9 14 19 10 11 9 13 0 3 18 0...

output:

187705071
978239692
71821726
431760146
264510379
169527109
443699837
777797420
713750880
984907966
4...

result:

wrong answer 1st lines differ - expected: '218640057', found: '187705071'

Test #24:

score: 0
Wrong Answer
time: 901ms
memory: 88152kb

input:

200000 20
11 4 7 18 16 15 15 18 11 2 4 1 17 18 6 9 19 12 2 14 8 6 10 4 15 16 17 13 18 1 15 18 15 9 1...

output:

166422414
912432086
160045684
778213352
460265301
4274695
54307907
925382565
56984261
620097951
8968...

result:

wrong answer 1st lines differ - expected: '438860874', found: '166422414'

Test #25:

score: 0
Wrong Answer
time: 604ms
memory: 87936kb

input:

200000 20
5 3 18 11 17 13 14 19 0 0 1 3 4 13 8 1 15 7 15 2 12 8 3 15 8 1 4 8 7 5 9 16 9 16 0 14 2 16...

output:

956706283
212033938
507517337
399999850
341608055
706696828
959439168
767661999
54406728
762208230
9...

result:

wrong answer 1st lines differ - expected: '739309565', found: '956706283'