제출 #1331475

#제출 시각아이디문제언어결과실행 시간메모리
1331475Mamikonm1코끼리 (Dancing Elephants) (IOI11_elephants)C++17
26 / 100
13 ms1448 KiB
#include "elephants.h"
#include<bits/stdc++.h>
using namespace std;
const int sqr=700,inf=2e9;
int n,l;
vector<int>x,y;
struct BLOCK{
    vector<int>a;
    vector<pair<int,int>>b;
    int mx=inf;
    void build(){
        mx=0;
        sort(begin(a),end(a));
        b=vector<pair<int,int>>(a.size());
        for(int i=a.size()-1,it;i>=0;--i){
            it=upper_bound(begin(a),end(a),a[i]+l)-begin(a);
            b[i].first=1;
            b[i].second=a[i];
            if(it!=a.size())b[i].first+=b[it].first,b[i].second=b[it].second;
        }
    }
    void del(int e){
        vector<int>c;
        bool dl=0;
        for(int i=0;i<a.size();++i){
            if(a[i]!=e||dl)c.push_back(a[i]);
            else dl=1;
        }
        assert(dl);
        a=c;
        build();
    }
};
vector<BLOCK>B(sqr);
int upd=0;
void build(){
    y=x;
    for(int i=0;i<sqr;++i)B[i].a.clear();
    sort(begin(y),end(y));
    for(int i=0;i<n;++i)B[i/sqr].a.push_back(y[i]);
    for(int i=0;i<sqr;++i)B[i].build();
}
void init(int N, int L, int X[])
{
    for(int i=0;i<N;++i)x.push_back(X[i]);
    n=N;
    l=L;
    build();
}

int find(int a){
    int last=-1;
    for(int i=0;i<sqr;++i){
        if(!B[i].a.empty()){
            last=i;
            if(B[i].a.back()>=a)return i;
        }
    }
    assert(last!=-1);
    return last;
}

int update(int i, int y)
{
    if(++upd==sqr){
        x[i]=y;
        build();
    }
    else{
        int b1=find(x[i]),b2=find(y);
        B[b1/sqr].del(x[i]);
        B[b2/sqr].a.push_back(y);
        B[b2/sqr].build();
        x[i]=y;
    }
    int ans=0,lf=-(2*l),it;
    for(int i=0;i<sqr;++i){
        if(B[i].a.empty())break;
        it=upper_bound(begin(B[i].a),end(B[i].a),lf+l)-begin(B[i].a);
        if(it!=B[i].a.size()){
            ans+=B[i].b[it].first;
            lf=B[i].b[it].second;
        }
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...