Submission #1240218

#TimeUsernameProblemLanguageResultExecution timeMemory
1240218simplemind_31Dancing Elephants (IOI11_elephants)C++20
0 / 100
0 ms328 KiB
#include "elephants.h"
#include <bits/stdc++.h>
using namespace std;
int n,l;
vector<int> ele;
set<int> cont;
set<int> cam;
void init(int N,int L,int X[]){
  ele.resize(n=N);
  l=L;
  for(int i=0;i<n;i++){
    cont.insert(ele[i]=X[i]);
  }
  cam.insert(ele[0]);
  for(int i=1;i<n;i++){
    if(L+*(--cam.end())<ele[i]){
      cam.insert(ele[i]);
    }
  }
  cam.insert(-l-1);
}
int update(int i,int y){
  auto p=--cam.upper_bound(ele[i]);
  if(*p==ele[i]){
    cont.erase(ele[i]);
    cam.erase(p);
    auto q=cont.upper_bound(ele[i]);
    if(q!=cont.end()){
      int nextnum=*q;
      while(*(--cam.upper_bound(nextnum))+l<nextnum){
        cam.insert(nextnum);
        auto p=cam.upper_bound(nextnum);
          if(p!=cam.end()){
          if(nextnum+l>*p){
            cam.erase(p);
            auto q=cont.upper_bound(nextnum+l);
            if(q!=cont.end()){
              nextnum=*q;
            }
          }
        }
      }
    }
    ele[i]=y;
    cont.insert(ele[i]);
    int nextnum=ele[i];
    //auto p=--cam.upper_bound(ele[i]);
    while(*(--cam.upper_bound(nextnum))+l<nextnum){
      cam.insert(nextnum);
      auto p=cam.upper_bound(nextnum);
      if(p!=cam.end()){
        if(nextnum+l>*p){
          cam.erase(p);
          auto q=cont.upper_bound(nextnum+l);
          if(q!=cont.end()){
            nextnum=*q;
          }
        }
      }
    }
  }else{
    cont.erase(ele[i]);
    ele[i]=y;
    cont.insert(ele[i]);
    int nextnum=ele[i];
    //auto p=--cam.upper_bound(ele[i]);
    while(*(--cam.upper_bound(nextnum))+l<nextnum){
      cam.insert(nextnum);
      auto p=cam.upper_bound(nextnum);
      if(p!=cam.end()){
        if(nextnum+l>*p){
          cam.erase(p);
          auto q=cont.upper_bound(nextnum+l);
          if(q!=cont.end()){
            nextnum=*q;
          }
        }
      }
    }
  }
  return cam.size()-1;
}
#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...