Submission #521206

# Submission time Handle Problem Language Result Execution time Memory
521206 2022-02-01T08:11:27 Z cadmiumsky Sails (IOI07_sails) C++14
40 / 100
1000 ms 5168 KB
#include <bits/stdc++.h>

using namespace std;
const int nmax = 1e5 + 5;

#define ll long long

namespace Slope {
  multiset<int> slope;
  int val0;
  int last;
  void init() {
    slope.insert(0);
    val0 = 1;
    last = 0;
    return;
  }
  void insert(int l, int k) {
    //cout << l << ' ' << k << '\n';
    if(k == 0)
      return;
    if(last < l) {
      while(slope.size() < val0) {
        slope.insert(last + 1);
      }
      last = l;
    }
    auto it = upper_bound(slope.begin(), slope.end(), l - k), lst = it;
    lst--;
    bool ok = 0;
    if(*lst == 0) {
      val0++;
      ok = 1;
    }
    int decr = k;
    if(it != slope.end())
      decr = *it - (l - k);
    int temp = *lst;
    slope.erase(lst);
    if(it != slope.end())
      slope.erase(it), slope.insert(l);
    slope.insert(temp + decr);
    if(ok)
      slope.insert(0);
    
    //cout << val0 << '\n';
    //for(auto x : slope) 
      //cout << x << ' ';
    //cout << '\n';
  }
  void calculate() {
    ll sum = 0;
    for(int i = 1; i <= last; i++) {
      while(slope.size() && *slope.begin() < i)
        val0--, slope.erase(slope.begin());
      //cout << i << ' ' << val0 << '\n';
      sum += (ll)val0 * (val0 - 1) / 2LL;
    }
    #undef it
    cout << sum << '\n';
    return;
  }
}

vector<int> v[nmax];

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  int maxx = 0;
  for(int i = 0,a ,b; i < n; i++) {
    cin >> a >> b;
    maxx = max(maxx, a);
    v[a].push_back(b);
  }
  Slope::init();
  for(int i = 1; i <= maxx; i++) {
    for(auto r : v[i])
      Slope::insert(i, r);
  }
  Slope::calculate();
  return 0;
}

Compilation message

sails.cpp: In function 'void Slope::insert(int, int)':
sails.cpp:23:26: warning: comparison of integer expressions of different signedness: 'std::multiset<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   23 |       while(slope.size() < val0) {
      |             ~~~~~~~~~~~~~^~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2636 KB Output is correct
2 Correct 1 ms 2636 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2636 KB Output is correct
2 Correct 2 ms 2636 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2636 KB Output is correct
2 Correct 1 ms 2636 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2636 KB Output is correct
2 Correct 3 ms 2636 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 13 ms 2740 KB Output is correct
2 Correct 2 ms 2636 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 91 ms 2920 KB Output is correct
2 Execution timed out 1085 ms 3548 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1084 ms 4280 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1077 ms 4048 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1080 ms 3784 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1083 ms 5168 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1095 ms 4872 KB Time limit exceeded
2 Halted 0 ms 0 KB -