Submission #122738

# Submission time Handle Problem Language Result Execution time Memory
122738 2019-06-29T07:51:21 Z nvmdava Dancing Elephants (IOI11_elephants) C++17
97 / 100
9000 ms 7848 KB
//#include "elephants.h"
#include <bits/stdc++.h>
#define ff first
#define ss second
#define pii pair<int, int>
using namespace std;
#define SQ1 800
#define SQ2 400
int n, l;
int loc[150005];
int bid[150005];

vector<vector<pair<int , pii> > > buck;
//{LOC {count, last} }


inline int find(){
   int res = 0;
   int lst = -1;
   for(auto& v : buck){
      if(v.empty() || v.back().ff <= lst) continue;
      int id = upper_bound(v.begin(), v.end(), lst, [](const int& lhs, const pair<int, pii>& rhs){
         return lhs < rhs.ff;
      }) - v.begin();
      res += v[id].ss.ff;
      lst = v[id].ss.ss;
   }
   return res;
}

inline void recalc(vector<pair<int, pii> >& vec){
   int sz = vec.size();
   int r = sz;
   for(int l = sz - 1; l >= 0; l--){
      while(vec[r - 1].ff > vec[l].ff + ::l) r--;
      vec[l].ss.ff = (r == sz ? 0 : vec[r].ss.ff) + 1;
      vec[l].ss.ss = (r == sz ? vec[l].ff + ::l : vec[r].ss.ss);
   }
}
vector<pii> sorted;
inline void renew(int o){
   for(int i = 0; i < n; i++){
      sorted[i].ff = loc[i];
      sorted[i].ss = i;
   }
   if(!o){
      sort(sorted.begin(), sorted.end());
   }
   buck.clear();
   buck.resize((n - 1) / SQ1 + 1);
   for(int i = 0; i < n; i++){
      buck[i / SQ1].push_back({sorted[i].ff, {0, 0}});
      bid[sorted[i].ss] = i / SQ1;
   }
   for(auto& x : buck){
      recalc(x);
   }
}
void init(int N, int L, int X[]){
   n = N; l = L;
   for(int i = 0; i < n; i++){
      loc[i] = X[i];
   }
   sorted.resize(n);
   renew(1);
}
int cnt = 0;
inline void erase(vector<pair<int, pii> >& buck, int& x){
   for(int i = 1; i < buck.size(); i++){
      if(buck[i - 1].ff == x) swap(buck[i - 1], buck[i]);
   }
   buck.pop_back();
   recalc(buck);
}
inline void insert(vector<pair<int, pii> >& buck, int& x){
   buck.push_back({x, {0, 0}});
   int i = buck.size() - 1;
   while(i != 0 && buck[i - 1].ff > buck[i].ff){
      swap(buck[i - 1], buck[i]);
      i--;
   }
   recalc(buck);
}
int update(int j, int y){
   if(loc[j] == y) return find();
   if(++cnt % SQ2 == 0){
      loc[j] = y;
      renew(0);
   } else {
      erase(buck[bid[j]], loc[j]);
      int t = upper_bound(buck.begin(), buck.end(), y, [](const int& lhs, const vector<pair<int, pii> >& rhs){
         return rhs.back().ff >= lhs;
      }) - buck.begin();
      if(t == buck.size()) t--;
      insert(buck[t], y);
      loc[j] = y;
      bid[j] = t;
   }
   return find();
}

Compilation message

elephants.cpp: In function 'void erase(std::vector<std::pair<int, std::pair<int, int> > >&, int&)':
elephants.cpp:69:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int i = 1; i < buck.size(); i++){
                   ~~^~~~~~~~~~~~~
elephants.cpp: In function 'int update(int, int)':
elephants.cpp:94:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       if(t == buck.size()) t--;
          ~~^~~~~~~~~~~~~~
# Verdict Execution time Memory 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
# Verdict Execution time Memory 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 348 KB Output is correct
# Verdict Execution time Memory 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 348 KB Output is correct
7 Correct 532 ms 1560 KB Output is correct
8 Correct 561 ms 1624 KB Output is correct
9 Correct 693 ms 2856 KB Output is correct
10 Correct 772 ms 2860 KB Output is correct
11 Correct 778 ms 2916 KB Output is correct
12 Correct 1445 ms 3004 KB Output is correct
13 Correct 794 ms 3080 KB Output is correct
# Verdict Execution time Memory 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 348 KB Output is correct
7 Correct 532 ms 1560 KB Output is correct
8 Correct 561 ms 1624 KB Output is correct
9 Correct 693 ms 2856 KB Output is correct
10 Correct 772 ms 2860 KB Output is correct
11 Correct 778 ms 2916 KB Output is correct
12 Correct 1445 ms 3004 KB Output is correct
13 Correct 794 ms 3080 KB Output is correct
14 Correct 717 ms 1880 KB Output is correct
15 Correct 843 ms 2212 KB Output is correct
16 Correct 2353 ms 3224 KB Output is correct
17 Correct 2568 ms 4012 KB Output is correct
18 Correct 2738 ms 3988 KB Output is correct
19 Correct 1467 ms 3948 KB Output is correct
20 Correct 2547 ms 3892 KB Output is correct
21 Correct 2477 ms 4016 KB Output is correct
22 Correct 1359 ms 4104 KB Output is correct
# Verdict Execution time Memory 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 348 KB Output is correct
7 Correct 532 ms 1560 KB Output is correct
8 Correct 561 ms 1624 KB Output is correct
9 Correct 693 ms 2856 KB Output is correct
10 Correct 772 ms 2860 KB Output is correct
11 Correct 778 ms 2916 KB Output is correct
12 Correct 1445 ms 3004 KB Output is correct
13 Correct 794 ms 3080 KB Output is correct
14 Correct 717 ms 1880 KB Output is correct
15 Correct 843 ms 2212 KB Output is correct
16 Correct 2353 ms 3224 KB Output is correct
17 Correct 2568 ms 4012 KB Output is correct
18 Correct 2738 ms 3988 KB Output is correct
19 Correct 1467 ms 3948 KB Output is correct
20 Correct 2547 ms 3892 KB Output is correct
21 Correct 2477 ms 4016 KB Output is correct
22 Correct 1359 ms 4104 KB Output is correct
23 Correct 5177 ms 7800 KB Output is correct
24 Correct 5697 ms 7732 KB Output is correct
25 Correct 4323 ms 7764 KB Output is correct
26 Correct 5527 ms 7840 KB Output is correct
27 Correct 6300 ms 7820 KB Output is correct
28 Correct 2855 ms 2348 KB Output is correct
29 Correct 2795 ms 2332 KB Output is correct
30 Correct 2865 ms 2308 KB Output is correct
31 Correct 2796 ms 2360 KB Output is correct
32 Correct 5983 ms 7828 KB Output is correct
33 Correct 5491 ms 7848 KB Output is correct
34 Correct 5446 ms 7776 KB Output is correct
35 Correct 5633 ms 7772 KB Output is correct
36 Correct 114 ms 7416 KB Output is correct
37 Execution timed out 9016 ms 7836 KB Time limit exceeded
38 Halted 0 ms 0 KB -