#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({i, p, 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";
}
}
컴파일 시 표준 에러 (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 time | Memory | Grader output |
|---|
| Fetching results... |