QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#40067#2831. Game Theoryhit47WA 157ms5852kbC++1.7kb2022-07-16 00:51:212022-07-16 00:51:22

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-07-16 00:51:22]
  • 评测
  • 测评结果:WA
  • 用时:157ms
  • 内存:5852kb
  • [2022-07-16 00:51:21]
  • 提交

answer

#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define ll long long 
const ll mod=998244353,N=2e5+10;
using namespace std;
int tree[N*4],lan[N*4],n;
char s[N];
void build(int root,int l,int r)
{
	lan[root]=0;
	if(l==r){
		tree[root]=(int)(s[l]-'0');
		return;
	}
	int mid=l+r>>1;
	build(root<<1,l,mid);
	build(root<<1|1,mid+1,r);
	tree[root]=tree[root<<1]+tree[root<<1|1];
}
void update(int root,int l,int r,int left,int right)
{
	if(lan[root])
	{
		lan[root]=0;
		int mid=l+r>>1;
		if(l!=r)lan[root<<1]=1,lan[root<<1|1]=1,tree[root<<1]=mid+1-l-tree[root<<1],tree[root<<1|1]=r-mid-tree[root<<1|1];
	}
	if(l>=left && r<=right)
	{
		tree[root]=r+1-l-tree[root];lan[root]=1;
		return;
	}
	if(l>right || r<left)return;
	int mid=l+r>>1;
	update(root<<1,l,mid,left,right);
	update(root<<1|1,mid+1,r,left,right);
	tree[root]=tree[root<<1]+tree[root<<1 | 1];
}
int query(int root,int l,int r,int left,int right)
{
	if(lan[root])
	{
		lan[root]=0;
		int mid=l+r>>1;
		if(l!=r)lan[root<<1]=1,lan[root<<1|1]=1,tree[root<<1]=mid+1-l-tree[root<<1],tree[root<<1|1]=r-mid-tree[root<<1|1];
	}
	if(l>=left && r<=right)return tree[root];
	if(l>right || r<left)return 0;
	int mid=l+r>>1;
	return query(root<<1,l,mid,left,right)+query(root<<1|1,mid+1,r,left,right);
}
long long erfen(int l,int r)
{
	if(l==r)return 0;
	if(query(1,1,n,l,r)==0)return 0;
	int mid=l+r>>1;
	return query(1,1,n,mid+1,r)*(mid+1-l-query(1,1,n,l,mid))*2+erfen(l,mid)+erfen(mid+1,r);
}
int main()
{
	int q,i,j;
	long long ans,t;
	while(scanf("%d%d",&n,&q)!=EOF)
	{
		scanf("%s",s+1);
		build(1,1,n);
		for(i=1;i<=q;++i)
		{
			int l,r;
			scanf("%d%d",&l,&r);
			update(1,1,n,l,r);
			ans=erfen(1,n)+query(1,1,n,1,n);
			printf("%lld\n",ans%mod);
		}
	}
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 5672kb

input:

3 2
010
1 2
2 3
5 1
00000
1 5

output:

1
3
5

result:

ok 3 lines

Test #2:

score: 0
Accepted
time: 3ms
memory: 5756kb

input:

1 1
0
1 1

output:

1

result:

ok single line: '1'

Test #3:

score: 0
Accepted
time: 55ms
memory: 5852kb

input:

2 2
01
2 2
2 2
2 2
01
1 2
1 2
1 2
1
1 1
1 1
1 2
1
1 1
1 1
2 2
00
1 2
1 2
2 2
11
1 2
1 2
2 2
01
2 2
1 1
2 2
10
2 2
1 2
2 2
01
1 2
1 2
1 2
0
1 1
1 1
2 2
01
1 2
2 2
1 2
0
1 1
1 1
1 2
1
1 1
1 1
2 2
10
1 2
1 1
1 2
0
1 1
1 1
2 2
01
1 2
1 2
2 2
10
1 2
1 1
1 2
0
1 1
1 1
1 2
0
1 1
1 1
1 2
1
1 1
1 1
2 2
10
1 ...

output:

0
3
1
3
0
1
0
1
2
0
0
2
0
1
2
0
1
3
1
0
1
2
1
0
0
1
3
2
1
0
1
3
3
2
1
0
1
0
0
1
0
1
0
2
2
1
0
1
2
1
1
0
2
0
2
3
1
0
0
1
2
0
0
1
0
1
0
1
1
0
1
2
2
0
0
2
0
1
0
1
1
0
1
0
1
0
0
1
0
1
0
1
2
0
3
0
1
0
0
1
1
0
1
0
1
2
0
2
1
0
0
3
1
2
0
1
3
2
1
0
0
1
2
0
2
0
0
1
0
1
1
0
1
0
1
0
1
0
1
2
1
0
3
1
0
3
0
1
0
1
...

result:

ok 200000 lines

Test #4:

score: -100
Wrong Answer
time: 157ms
memory: 5772kb

input:

11 20
00010111000
1 6
1 11
5 6
8 11
1 4
3 8
4 11
1 7
5 9
1 4
6 10
5 6
1 7
5 10
1 10
9 11
6 8
1 4
8 11
1 4
10 20
0101000010
3 4
2 2
4 8
4 6
6 7
3 7
3 3
1 5
1 5
6 8
2 2
2 4
2 6
5 7
1 3
2 5
6 8
7 9
5 8
3 10
4 20
1011
2 4
1 4
1 3
2 3
1 1
2 2
1 2
2 4
1 2
3 4
3 4
3 4
1 4
2 2
1 4
1 3
1 1
1 3
1 3
2 2
4 20
1...

output:

16
55
53
25
13
15
43
52
41
33
34
40
41
47
33
26
27
35
39
31
19
20
35
38
36
41
36
29
36
29
22
31
20
23
28
20
21
10
14
30
2
10
5
7
10
9
7
2
0
10
0
10
2
1
9
6
7
4
7
8
4
9
1
6
8
3
5
7
3
7
6
8
6
9
6
7
2
0
5
3
66
105
83
68
92
137
92
76
85
92
127
120
119
104
124
65
70
88
61
53
40
43
25
21
32
59
67
32
31
48...

result:

wrong answer 13th lines differ - expected: '43', found: '41'