답안 #731507

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
731507 2023-04-27T13:38:22 Z 1075508020060209tc 가로등 (APIO19_street_lamps) C++14
0 / 100
610 ms 524288 KB
//#include "lib2249.h"
#include<bits/stdc++.h>
using namespace std;
#define int long long

int lowbit(int x){return x&-x;}
int bit[500005];
void upd(int pl,int val){
while(pl<=500000){
    bit[pl]+=val;
    pl+=lowbit(pl);
}
}
int qsum(int pl){
int ret=0;
while(pl){
    ret+=bit[pl];
    pl-=lowbit(pl);
}
return ret;
}



int n;int Q;
string ts;
int ar[500005];
string typs[500005];
set<pair<int,int>>seg;


struct cdq{
int t;int x;int y;
int val;int id;
};
bool cmp(cdq i,cdq j){
if(i.t<j.t){return 1;}
if(i.t>j.t){return 0;}


}


vector<cdq>pts;

void ptins(int a,int b,int c,int d,int vl,int t){
pts.push_back({t,c,d,vl,0});
pts.push_back({t,a-1,b-1,vl,0});
pts.push_back({t,c,b-1,-vl,0});
pts.push_back({t,a-1,d,-vl,0});
}


void mrg(int a,int b,int vl,int t){
auto rit=seg.upper_bound({a,9999999});
auto lit=prev(rit);
int ll=(*lit).first;int lr=(*lit).second;
int rl=(*rit).first;int rr=(*rit).second;
ptins(ll,rl,lr,rr,vl,t);
seg.erase(rit);
seg.erase(lit);
seg.insert({ll,rr});
}



signed main(){




cin>>n>>Q;
cin>>ts;
for(int i=1;i<=n;i++){
    ar[i]=ts[i-1]-'0';
}
for(int i=1;i<=n;i++){
    if(ar[i]==0){continue;}
    int l=i;
    seg.insert({i,i});
    while(i+1<=n&&ar[i+1]==1){
        seg.insert({i+1,i+1});
        mrg(i,i+1,Q+1,0);
    }
}

for(int i=1;i<=Q;i++){
    cin>>typs[i];
    if(typs[i]=="toggle"){
    int pl;
    cin>>pl;
    ar[pl]^=1;
    if(ar[pl]==1){
        seg.insert({pl,pl});
        if(pl>=2&&ar[pl-1]==1){
            mrg(pl-1,pl,Q+1-i,i);
        }
        if(pl<=n-1&&ar[pl+1]==1){
            mrg(pl,pl+1,Q+1-i,i);
        }
    }else{
        auto it=seg.upper_bound({pl,9999999});
        it=prev(it);
        int l=(*it).first;int r=(*it).second;
        seg.erase(it);
        if(l<pl){
            ptins(l,pl,pl-1,r,-(Q+1-i),i);
        }
        if(r>pl){
            ptins(pl,pl+1,pl,r,-(Q+1-i),i);
        }
        if(r>pl){
            seg.insert({pl+1,r});
        }
        if(l<pl){
            seg.insert({l,pl-1});
        }
    }

    }else{
        int a;int b;
        cin>>a>>b;
        pts.push_back({i,a,b,0,i});
    }

}



}


/*
void op(set<int>st){

for(auto it=st.begin();it!=st.end();it++){
    cout<<*it<<" ";
}cout<<endl;

}
*/

Compilation message

street_lamps.cpp: In function 'int main()':
street_lamps.cpp:79:9: warning: unused variable 'l' [-Wunused-variable]
   79 |     int l=i;
      |         ^
street_lamps.cpp: In function 'bool cmp(cdq, cdq)':
street_lamps.cpp:41:1: warning: control reaches end of non-void function [-Wreturn-type]
   41 | }
      | ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 10 ms 15956 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 551 ms 524288 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 10 ms 16212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 610 ms 524288 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 10 ms 15956 KB Output isn't correct
2 Halted 0 ms 0 KB -