답안 #834306

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
834306 2023-08-22T12:51:22 Z Antekb 가로등 (APIO19_street_lamps) C++17
40 / 100
5000 ms 159124 KB
#include<bits/stdc++.h>
#define st first
#define nd second
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define eb emplace_back
#define pp pop_back
#define mp make_pair
using namespace std;
using pii = pair<int, int>;
using ll = long long;
using vi = vector<int>;
using vii = vector<pii>;
void debug(){cerr<<"\n";}
template<typename H, typename... T>
void debug(H h, T... t){
	cerr<<h;
	if(sizeof...(t)){
		cerr<<", ";
	}
	debug(t...);
}
#define deb(x...) cerr<<#x<<" = ";debug(x);

mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
const int N=1<<19;
vi todo[N];
int pref[N+N], suf[N+N], L[N+N], R[N+N], siz[N+N], M[N], tim[N+N];
int male[N];
int ans[N], typ[N];
vector<pair<pii, pii> > U[N];
vector<pair<int, pii> > Q[N];
void upd(int v){
	int l=v+v, r=v+v+1;
	if(pref[l]==siz[l])pref[v]=pref[r]+siz[l];
	else pref[v]=pref[l];
	if(suf[r]==siz[r])suf[v]=suf[l]+siz[r];
	else suf[v]=suf[r];
}
int main(){
	int n, q;
	cin>>n>>q;
	string s;
	cin>>s;
	for(int i=0; i<n; i++){
		siz[N+i]=1;
		L[N+i]=i;
		R[N+i]=i+1;
		suf[N+i]=pref[N+i]=(s[i]-'0');
	}
	for(int i=N-1; i; i--){
		siz[i]=siz[i+i]+siz[i+i+1];
		L[i]=L[i+i];
		M[i]=R[i+i];
		if(R[i+i+1]==0)R[i]=R[i+i];
		else R[i]=R[i+i+1];
		upd(i);
	}
	for(int qq=1; qq<=q; qq++){
		cin>>s;
		if(s[0]=='q'){
			//deb(qq);
			typ[qq]=1;
			int a, b;
			cin>>a>>b;
			a--;
			b--;
			if(a==b-1){
				//deb(a, suf[N+a], tim[N+a]);
				ans[qq]=male[a]+suf[N+a]*(qq-tim[N+a]);
				continue;
			}
			//[a, b)
			int v=1;
			while(v<N){
				int m=M[v];
				if(m>=b)v=v+v;
				else if(m<=a)v=v+v+1;
				else{
					int x=m-a, y=b-m;
					//deb(v, L[v], R[v], suf[v+v], pref[v+v+1], qq-tim[v]);deb(x, y);
					U[v].eb(mp(qq, qq-tim[v]), mp(suf[v+v], pref[v+v+1]));
					tim[v]=qq;
					Q[v].eb(qq, mp(x, y));
					break;
				}
			}

		}
		else{
			int v;
			cin>>v;
			v--;
			if(suf[N+v]){
				male[v]+=qq-tim[N+v];
			}
			v+=N;
			tim[v]=qq;
			for(int vv=v/2; vv; vv/=2){
				U[vv].eb(mp(qq, qq-tim[vv]), mp(suf[vv+vv], pref[vv+vv+1]));
			}
			suf[v]^=1;
			pref[v]^=1;
			for(v/=2; v; v/=2){
				//deb(v, L[v], R[v], suf[v+v], pref[v+v+1], qq-tim[v]);
				tim[v]=qq;
				upd(v);
			}
		}
	}
	for(int v=1; v<N; v++){
		if(Q[v].size()){
			for(auto i:Q[v]){
				for(auto j:U[v]){
					if(j.st.st<=i.st && j.nd.st>=i.nd.st && j.nd.nd>=i.nd.nd){
						ans[i.st]+=j.st.nd;
					}
				}
			}
		}
	}
	for(int i=1; i<=q; i++){
		if(typ[i])cout<<ans[i]<<"\n";
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 25 ms 49620 KB Output is correct
2 Correct 26 ms 49620 KB Output is correct
3 Correct 26 ms 49612 KB Output is correct
4 Correct 25 ms 49620 KB Output is correct
5 Correct 25 ms 49588 KB Output is correct
6 Correct 25 ms 49612 KB Output is correct
7 Correct 26 ms 49636 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 367 ms 100780 KB Output is correct
2 Correct 316 ms 100016 KB Output is correct
3 Correct 262 ms 102164 KB Output is correct
4 Correct 448 ms 123496 KB Output is correct
5 Correct 396 ms 106728 KB Output is correct
6 Correct 528 ms 136068 KB Output is correct
7 Correct 215 ms 58804 KB Output is correct
8 Correct 218 ms 60224 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 27 ms 49968 KB Output is correct
2 Correct 27 ms 49996 KB Output is correct
3 Correct 27 ms 49876 KB Output is correct
4 Correct 26 ms 49740 KB Output is correct
5 Correct 993 ms 159124 KB Output is correct
6 Execution timed out 5049 ms 148148 KB Time limit exceeded
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 25 ms 49748 KB Output is correct
2 Correct 25 ms 49876 KB Output is correct
3 Correct 33 ms 49940 KB Output is correct
4 Correct 27 ms 50056 KB Output is correct
5 Execution timed out 5039 ms 77420 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 25 ms 49620 KB Output is correct
2 Correct 26 ms 49620 KB Output is correct
3 Correct 26 ms 49612 KB Output is correct
4 Correct 25 ms 49620 KB Output is correct
5 Correct 25 ms 49588 KB Output is correct
6 Correct 25 ms 49612 KB Output is correct
7 Correct 26 ms 49636 KB Output is correct
8 Correct 367 ms 100780 KB Output is correct
9 Correct 316 ms 100016 KB Output is correct
10 Correct 262 ms 102164 KB Output is correct
11 Correct 448 ms 123496 KB Output is correct
12 Correct 396 ms 106728 KB Output is correct
13 Correct 528 ms 136068 KB Output is correct
14 Correct 215 ms 58804 KB Output is correct
15 Correct 218 ms 60224 KB Output is correct
16 Correct 27 ms 49968 KB Output is correct
17 Correct 27 ms 49996 KB Output is correct
18 Correct 27 ms 49876 KB Output is correct
19 Correct 26 ms 49740 KB Output is correct
20 Correct 993 ms 159124 KB Output is correct
21 Execution timed out 5049 ms 148148 KB Time limit exceeded
22 Halted 0 ms 0 KB -