답안 #132155

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
132155 2019-07-18T11:06:19 Z MvC 가로등 (APIO19_street_lamps) C++11
20 / 100
153 ms 8240 KB
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
#include<bits/stdc++.h>
//#include "aliens.h"
#define rc(x) return cout<<x<<endl,0
#define pb push_back
#define mkp make_pair
#define in insert
#define er erase
#define fd find
#define fr first
#define sc second
typedef long long ll;
typedef long double ld;
const ll INF=0x3f3f3f3f3f3f3f3f;
const ll llinf=(1LL<<62);
const int inf=(1<<30);
const int nmax=3e5+50;
const int mod=1e9+7;
using namespace std;
int n,q,a[nmax],nr[105][105],x,y,i,j,ta[nmax],tt[nmax],rs,sb2,t,b[nmax],sb3,st[4*nmax];
string s;
char c;
vector<pair<int,int> >qr;
void upd(int nod,int l,int r,int p,int v)
{
	if(l==r)
	{
		st[nod]=v;
		return;
	}
	int mid=(l+r)/2;
	if(p<=mid)upd(2*nod,l,mid,p,v);
	else upd(2*nod+1,mid+1,r,p,v);
	st[nod]=max(st[2*nod],st[2*nod+1]);
}
int qry(int nod,int l,int r,int tl,int tr)
{
	if(tr<l || tl>r)return 0;
	if(tl<=l && r<=tr)return st[nod];
	int mid=(l+r)/2;
	return max(qry(2*nod,l,mid,tl,tr),qry(2*nod+1,mid+1,r,tl,tr));
}
int main()
{
	//freopen("sol.in","r",stdin);
	//freopen("sol.out","w",stdout);
	//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
	ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
	cin>>n>>q;
	for(i=1;i<=n;i++)
	{
		cin>>c;
		a[i]=c-'0';
		b[i]=a[i];
	}
	sb2=1,sb3=1;
	for(i=1;i<=q;i++)
	{
		cin>>s;
		if(s[0]=='t')
		{
			cin>>x;
			b[x]^=1;
			if(!b[x])sb3=0;
			qr.pb(mkp(x,0));
		}
		else
		{
			cin>>x>>y;
			qr.pb(mkp(x,y));
			if(x+1!=y)sb2=0;
		}
	}
	if(sb2)
	{
		//cout<<1<<endl;
		for(i=1;i<=q;i++)
		{
			x=qr[i-1].fr,y=qr[i-1].sc;
			if(!y)
			{
				a[x]^=1;
				if(!a[x])tt[x]+=i-ta[x];
				else ta[x]=i;
			}
			else
			{
				rs=tt[x];
				if(a[x])rs+=i-ta[x];
				cout<<rs<<'\n';
			}
		}
	}
	else if(sb3)
	{
		for(i=1;i<=n;i++)
		{
			if(a[i])upd(1,1,n,i,0);
			else upd(1,1,n,i,inf);
		}
		for(i=1;i<=q;i++)
		{
			x=qr[i-1].fr,y=qr[i-1].sc;
			if(!y)
			{
				a[x]^=1;
				upd(1,1,n,x,i);
			}
			else
			{
				rs=qry(1,1,n,x,y-1);
				if(rs==inf)cout<<0<<'\n';
				else cout<<i-rs+1<<'\n';
			}
		}
	}
	else
	{
		for(t=0;t<q;t++)
		{
			for(i=1;i<=n;i++)
			{
				for(j=i;j<=n;j++)
				{
					if(!a[j])break;
					nr[i][j]++;
				}
			}
			x=qr[t].fr,y=qr[t].sc;
			if(!y)a[x]^=1;
			else cout<<nr[x][y-1]<<'\n';
		}
	}
    return 0;
}
/*
5 11
10010
q 1 2
q 2 3
q 3 4
q 4 5
q 5 6
t 1
q 1 2
t 2
q 2 3
t 2
q 2 3
*/

Compilation message

street_lamps.cpp:2:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
 #pragma GCC optimization("O3")
 
street_lamps.cpp:3:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
 #pragma GCC optimization("unroll-loops")
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Incorrect 2 ms 380 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 88 ms 4644 KB Output is correct
2 Correct 91 ms 4584 KB Output is correct
3 Correct 101 ms 4788 KB Output is correct
4 Correct 128 ms 8240 KB Output is correct
5 Correct 131 ms 7392 KB Output is correct
6 Correct 118 ms 8160 KB Output is correct
7 Correct 143 ms 7204 KB Output is correct
8 Correct 153 ms 7268 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Incorrect 3 ms 376 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 8 ms 760 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Incorrect 2 ms 380 KB Output isn't correct