Submission #1296918

#TimeUsernameProblemLanguageResultExecution timeMemory
1296918nguyhoangphuWeighting stones (IZhO11_stones)C++20
0 / 100
1 ms332 KiB
#include<bits/stdc++.h>
using namespace std;
#define file "a"
#define int long long 
#define ll long long
#define pii pair<int, int>
#define pli pair<ll, int>
#define fi first
#define se second
#define sz(a) (int)a.size()
#define pb push_back
#define mask(i) (1 << i)
const int N = 1e5, inf = 1e9;
void MAX(int &a, int b) { a = max(a, b); }
void MIN(int &a, int b) { a = min(a, b); }
struct stt
{
  int i, w, tp;
  bool operator < (const stt &o) const 
  {
    return i < o.i;
  }
};
int n;
int mx[4 * N + 2], mn[4 * N + 2], lz[4 * N + 2];
vector<stt> a;
void down(int id)
{
  if (lz[id] != 0)
  {
    mx[id * 2] += lz[id];
    mx[id * 2 + 1] += lz[id];
    mn[id * 2] += lz[id];
    mn[id * 2 + 1] += lz[id];
    lz[id * 2] += lz[id];
    lz[id * 2 + 1] += lz[id];
    lz[id] = 0;
  }
}
void update(int l, int r, int id, int u, int v, int x)
{
  if (r < u || v < l) return;
  if (u <= l && r <= v)
  {
    mx[id] += x;
    mn[id] += x;
    lz[id] += x;
    return;
  }
  int m = (l + r) / 2;
  down(id);
  update(l, m, id * 2, u, v, x);
  update(m + 1, r, id * 2 + 1, u, v, x);
  mx[id] = max(mx[id * 2], mx[id * 2 + 1]);
  mn[id] = min(mn[id * 2], mn[id * 2 + 1]);
}
int getmax(int l, int r, int id, int u, int v)
{
  if (r < u || v < l) return 0;
  if (u <= l && r <= v) return mx[id];
  int m = (l + r) / 2;
  down(id);
  return max(getmax(l, m, id * 2, u, v), getmax(m + 1, r, id * 2 + 1, u, v));
}
int getmin(int l, int r, int id, int u, int v)
{
  if (r < u || v < l) return 0;
  if (u <= l && r <= v) return mn[id];
  int m = (l + r) / 2;
  down(id);
  return min(getmin(l, m, id * 2, u, v), getmin(m + 1, r, id * 2 + 1, u, v));
}
signed main()
{
  ios_base::sync_with_stdio(0);
  cin.tie(0); cout.tie(0);
  if (fopen(file".inp", "r"))
  {
    freopen(file".inp", "r", stdin);
    freopen(file".out", "w", stdout);
  }
  cin >> n;
  for (int i = 1; i <= n; i++)
  {
    int p, tp;
    cin >> p >> tp;
    a.pb({p, i, tp});
  }
  sort(a.begin(), a.end());
  int val = 0, wmax = 0;
  for (stt x : a)
  {
    if (x.w > val) val = x.w, wmax = x.tp;
    if (x.tp == 1) update(1, n, 1, 1, x.w, 1);
    else update(1, n, 1, 1, x.w, -1);
    int kt = wmax;
    if (kt == 1) 
    { if (mn[1] < 0) kt = 0; }
    else 
    { if (mx[1] > 0) kt = 0; }
    if (kt == 1) cout << '>';
    else if (kt == 2) cout << '<';
    else cout << '?';
    cout << "\n";
  }
}

Compilation message (stderr)

stones.cpp: In function 'int main()':
stones.cpp:79:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   79 |     freopen(file".inp", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
stones.cpp:80:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   80 |     freopen(file".out", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...