답안 #407274

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
407274 2021-05-18T16:58:27 Z anime 가로등 (APIO19_street_lamps) C++14
100 / 100
2980 ms 47132 KB
#include <bits/stdc++.h>
using namespace std;

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template <class T> using ordered_set = tree<T,null_type,less_equal<T>, rb_tree_tag,tree_order_statistics_node_update>;

//#define int long long
#define pb push_back
#define pii pair<int,int>
#define fr first
#define sc second
#define OK puts("OK");
#define NO puts("NO");
#define YES puts("YES");
#define endi puts("");
#define ret return
#define all(s) s.begin(),s.end()
#define allr(s) s.rbegin(),s.rend()
const int N = 3e5+5,INF = 1e9+7;
int q[N],z[N],xo;
char s[N];
vector <pair<pii,int>> der[4*N];

void update(int v,int l,int r,int ql,int qr,int lol,int ror,int cost){
	
	if (l > qr || r < ql)ret ;
	if (ql <= l && r <= qr){
		der[v].pb({{lol,ror},cost});
		ret ;
	}
	int m = l+r>>1;
	update(v<<1,l,m,ql,qr,lol,ror,cost);
	update(v<<1|1,m+1,r,ql,qr,lol,ror,cost);
}

int get_ans(int v,int l,int r,int pos,int x){
	
	int ans=0;
	for (pair<pii,int> z: der[v])
		if (z.fr.fr <= x && x <= z.fr.sc)
			ans += z.sc,xo^=1;
	
	if (l == r)ret ans;
	int m = l+r>>1;
	if (pos > m)
		ret get_ans(v<<1|1,m+1,r,pos,x)+ans;
	ret get_ans(v<<1,l,m,pos,x)+ans;
	
}




main(){
	int n,t,i;
	scanf("%d%d",&n,&t);
	scanf("%s",s+1);
	s[0] = s[n+1] = '0';
	set <int> as;
	for (i=0;i<=n+1;++i)
		if (s[i] == '0')as.insert(i);
	for (i=0;i<=n+1;++i){
		if(s[i] == '0') continue;
		int j=i;
		while(j <= n+1 && s[j] == s[i]) j++;
		update(1, 1, n, i, j-1, i, j-1, 0);
		i = j - 1;
	}
	for (i=1;i<=t;++i){
		char ss[7];
		scanf("%s",ss);
		if (ss[0] == 'q'){
			int l,r;
			scanf("%d%d",&l,&r);
			
			r--;
			xo = 0;
			int ans = get_ans(1,1,n,l,r);
			if (xo)ans += i;
			printf("%d\n",ans);
		}
		else {
			int pos;
			scanf("%d",&pos);
			if (s[pos] == '0'){
				as.erase(pos);
				int l = *--as.upper_bound(pos);
				int r = *as.lower_bound(pos);
				update(1,1,n,l+1,pos,pos,r-1,-i);
				s[pos] = '1';
			} 
			else {
				int l = *--as.upper_bound(pos);
				int r = *as.lower_bound(pos);
				update(1,1,n,l+1,pos,pos,r-1,i);
				s[pos] = '0';
				as.insert(pos);
				
			}
			
		}
	}
	
	
}
 
 
 
 
 
 
 
 
 
 
 
 

Compilation message

street_lamps.cpp: In function 'void update(int, int, int, int, int, int, int, int)':
street_lamps.cpp:33:11: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   33 |  int m = l+r>>1;
      |          ~^~
street_lamps.cpp: In function 'int get_ans(int, int, int, int, int)':
street_lamps.cpp:46:11: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   46 |  int m = l+r>>1;
      |          ~^~
street_lamps.cpp: At global scope:
street_lamps.cpp:56:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   56 | main(){
      | ^~~~
street_lamps.cpp: In function 'int main()':
street_lamps.cpp:58:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   58 |  scanf("%d%d",&n,&t);
      |  ~~~~~^~~~~~~~~~~~~~
street_lamps.cpp:59:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   59 |  scanf("%s",s+1);
      |  ~~~~~^~~~~~~~~~
street_lamps.cpp:73:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   73 |   scanf("%s",ss);
      |   ~~~~~^~~~~~~~~
street_lamps.cpp:76:9: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   76 |    scanf("%d%d",&l,&r);
      |    ~~~~~^~~~~~~~~~~~~~
street_lamps.cpp:86:9: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   86 |    scanf("%d",&pos);
      |    ~~~~~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 28492 KB Output is correct
2 Correct 16 ms 28440 KB Output is correct
3 Correct 16 ms 28364 KB Output is correct
4 Correct 16 ms 28364 KB Output is correct
5 Correct 15 ms 28416 KB Output is correct
6 Correct 16 ms 28492 KB Output is correct
7 Correct 16 ms 28400 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 827 ms 33296 KB Output is correct
2 Correct 426 ms 33404 KB Output is correct
3 Correct 251 ms 34028 KB Output is correct
4 Correct 489 ms 43764 KB Output is correct
5 Correct 457 ms 41920 KB Output is correct
6 Correct 490 ms 44584 KB Output is correct
7 Correct 294 ms 43332 KB Output is correct
8 Correct 226 ms 30632 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 28492 KB Output is correct
2 Correct 16 ms 28540 KB Output is correct
3 Correct 17 ms 28492 KB Output is correct
4 Correct 16 ms 28492 KB Output is correct
5 Correct 688 ms 46300 KB Output is correct
6 Correct 592 ms 44504 KB Output is correct
7 Correct 449 ms 41180 KB Output is correct
8 Correct 220 ms 30728 KB Output is correct
9 Correct 124 ms 29252 KB Output is correct
10 Correct 131 ms 29300 KB Output is correct
11 Correct 130 ms 29376 KB Output is correct
12 Correct 289 ms 43460 KB Output is correct
13 Correct 217 ms 30652 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 28492 KB Output is correct
2 Correct 17 ms 28536 KB Output is correct
3 Correct 19 ms 28492 KB Output is correct
4 Correct 17 ms 28492 KB Output is correct
5 Correct 294 ms 39880 KB Output is correct
6 Correct 387 ms 41852 KB Output is correct
7 Correct 485 ms 44204 KB Output is correct
8 Correct 600 ms 47132 KB Output is correct
9 Correct 301 ms 34820 KB Output is correct
10 Correct 214 ms 35676 KB Output is correct
11 Correct 301 ms 34760 KB Output is correct
12 Correct 212 ms 35660 KB Output is correct
13 Correct 294 ms 34968 KB Output is correct
14 Correct 205 ms 35780 KB Output is correct
15 Correct 302 ms 43488 KB Output is correct
16 Correct 228 ms 30752 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 28492 KB Output is correct
2 Correct 16 ms 28440 KB Output is correct
3 Correct 16 ms 28364 KB Output is correct
4 Correct 16 ms 28364 KB Output is correct
5 Correct 15 ms 28416 KB Output is correct
6 Correct 16 ms 28492 KB Output is correct
7 Correct 16 ms 28400 KB Output is correct
8 Correct 827 ms 33296 KB Output is correct
9 Correct 426 ms 33404 KB Output is correct
10 Correct 251 ms 34028 KB Output is correct
11 Correct 489 ms 43764 KB Output is correct
12 Correct 457 ms 41920 KB Output is correct
13 Correct 490 ms 44584 KB Output is correct
14 Correct 294 ms 43332 KB Output is correct
15 Correct 226 ms 30632 KB Output is correct
16 Correct 17 ms 28492 KB Output is correct
17 Correct 16 ms 28540 KB Output is correct
18 Correct 17 ms 28492 KB Output is correct
19 Correct 16 ms 28492 KB Output is correct
20 Correct 688 ms 46300 KB Output is correct
21 Correct 592 ms 44504 KB Output is correct
22 Correct 449 ms 41180 KB Output is correct
23 Correct 220 ms 30728 KB Output is correct
24 Correct 124 ms 29252 KB Output is correct
25 Correct 131 ms 29300 KB Output is correct
26 Correct 130 ms 29376 KB Output is correct
27 Correct 289 ms 43460 KB Output is correct
28 Correct 217 ms 30652 KB Output is correct
29 Correct 15 ms 28492 KB Output is correct
30 Correct 17 ms 28536 KB Output is correct
31 Correct 19 ms 28492 KB Output is correct
32 Correct 17 ms 28492 KB Output is correct
33 Correct 294 ms 39880 KB Output is correct
34 Correct 387 ms 41852 KB Output is correct
35 Correct 485 ms 44204 KB Output is correct
36 Correct 600 ms 47132 KB Output is correct
37 Correct 301 ms 34820 KB Output is correct
38 Correct 214 ms 35676 KB Output is correct
39 Correct 301 ms 34760 KB Output is correct
40 Correct 212 ms 35660 KB Output is correct
41 Correct 294 ms 34968 KB Output is correct
42 Correct 205 ms 35780 KB Output is correct
43 Correct 302 ms 43488 KB Output is correct
44 Correct 228 ms 30752 KB Output is correct
45 Correct 2980 ms 31432 KB Output is correct
46 Correct 265 ms 31148 KB Output is correct
47 Correct 248 ms 34856 KB Output is correct
48 Correct 473 ms 43332 KB Output is correct
49 Correct 139 ms 28996 KB Output is correct
50 Correct 136 ms 29004 KB Output is correct
51 Correct 141 ms 29124 KB Output is correct
52 Correct 142 ms 29016 KB Output is correct
53 Correct 143 ms 29148 KB Output is correct
54 Correct 142 ms 29032 KB Output is correct