Submission #3770832


Source Code Expand

#include <cstdio>
#include <set>
#include <queue>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
#define REP(i, n) for(int i = 0; i < (int)(n); ++i)
typedef long long ll;

int n;
int k;
int nQuery;
int vs[2000+10];
// int ms[2000+10][2010];
// int is[2000+10][2010];

struct K {
  vector<int> sorted;
  int used;
};
bool operator>(const K& k1, const K& k2) {
  return k1.sorted[used] > k2.sorted[used];
}

int main(void) {
  scanf("%d%d%d", &n, &k, &nQuery);
  set<int> ss;
  ss.insert(0);
  REP(i, n) {
    scanf("%d", &vs[i]);
    ss.insert(vs[i]);
  }

  int res = 2000000000;
  for(int v : ss) {
    priority_queue<K, vector<K>, greater<K> > q;
    { // init
      int lastOmit = -1;
      vector<int> sorted;
      REP(i, n) {
        if(vs[i] <= v) {
          if((int)sorted.size() >= k) {
            K r;
            r.used = 0;
            sort(sorted.begin(), sorted.end());
            r.sorted = sorted;
            q.push(r);
          }
          lastOmit = i;
          sorted.clear();
        } else {
          sorted.push_back(vs[i]);
        }
      }
      K r;
      r.used = 0;
      if((int)sorted.size() >= k) {
        sort(sorted.begin(), sorted.end());
        r.sorted = sorted;
        q.push(r);
      }
    }

    int maxi = -1;
    int mini = 2000000000;
    int cnt = 0;
    cerr << endl;
    while(cnt < nQuery && !q.empty()) {
      K cur = q.top(); q.pop();
      int curV = cur.sorted[cur.used];
      cerr << ">" << curV << endl;
      maxi = max(maxi, curV);
      mini = min(mini, curV);
      cur.used++;
      if((int)cur.sorted.size() - cur.used >= k) {
        q.push(cur);
      }
      ++cnt;
    }
    // cerr << v << " " << mini << " " << maxi << " " << cnt << endl;
    if(cnt == nQuery) {
      int cur = maxi - mini;
      res = min(res, cur);
    } else {
      break;
    }
  }

  printf("%d\n", res);
  
  return 0;
}

Submission Info

Submission Time
Task E - Range Minimum Queries
User ush
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2001 Byte
Status CE

Compile Error

./Main.cpp: In function ‘bool operator>(const K&, const K&)’:
./Main.cpp:24:20: error: ‘used’ was not declared in this scope
   return k1.sorted[used] > k2.sorted[used];
                    ^
./Main.cpp: In function ‘int main()’:
./Main.cpp:28:35: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d%d", &n, &k, &nQuery);
                                   ^
./Main.cpp:32:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &vs[i]);
                        ^