이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int MAXN = 1e5;
const int INF = 1e9;
int N, M, K;
pii A[MAXN+10];
pii operator + (const pii &p, const pii &q) { return {min(p.first, q.first), max(p.second, q.second)}; }
struct SEG
{
pii tree[MAXN*4+10];
void init(int node, int tl, int tr)
{
if(tl==tr)
{
tree[node]={tl, tl};
return;
}
int mid=tl+tr>>1;
init(node*2, tl, mid);
init(node*2+1, mid+1, tr);
tree[node]={INF, -INF};
}
void update(int node, int tl, int tr, int l, int r, pii k)
{
if(r<tl || tr<l) return;
if(l<=tl && tr<=r)
{
tree[node]=tree[node]+k;
return;
}
int mid=tl+tr>>1;
update(node*2, tl, mid, l, r, k);
update(node*2+1, mid+1, tr, l, r, k);
}
void query(int node, int tl, int tr, pii t)
{
t.first=min(t.first, tree[node].first);
t.second=max(t.second, tree[node].second);
if(tl==tr)
{
A[tl]=t;
return;
}
int mid=tl+tr>>1;
query(node*2, tl, mid, t);
query(node*2+1, mid+1, tr, t);
}
}seg;
struct SEG2
{
pii tree[MAXN*4+10][30];
pii query(int node, int tl, int tr, int l, int r, int k)
{
if(l<=tl && tr<=r) return tree[node][k];
if(r<tl || tr<l) return {INF, -INF};
int mid=tl+tr>>1;
return query(node*2, tl, mid, l, r, k)+query(node*2+1, mid+1, tr, l, r, k);
}
void flush(int node, int tl, int tr, int k)
{
if(tl==tr)
{
tree[node][k]=A[tl];
return;
}
int mid=tl+tr>>1;
flush(node*2, tl, mid, k);
flush(node*2+1, mid+1, tr, k);
tree[node][k]=tree[node*2][k]+tree[node*2+1][k];
}
void init()
{
flush(1, 1, N, 0);
for(int i=1; i<=20; i++)
{
for(int j=1; j<=N; j++) A[j]=query(1, 1, N, A[j].first, A[j].second, i-1);
flush(1, 1, N, i);
}
}
}seg2;
int main()
{
scanf("%d%d%d", &N, &K, &M);
seg.init(1, 1, N);
for(int i=1; i<=M; i++)
{
int l, r;
scanf("%d%d", &l, &r);
if(l<r)
{
seg.update(1, 1, N, l, min(l+K-1, r-1), {INF, r});
}
else
{
seg.update(1, 1, N, max(l-K+1, r+1), l, {r, -INF});
}
}
seg.query(1, 1, N, {INF, -INF});
seg2.init();
scanf("%d", &M);
while(M--)
{
int s, e;
scanf("%d%d", &s, &e);
pii t=seg2.query(1, 1, N, s, s, 20);
if(t.first>e || t.second<e) { printf("-1\n"); continue; }
int ans=0, l=s, r=s;
for(int i=19; i>=0; i--)
{
pii t=seg2.query(1, 1, N, l, r, i);
if(t.first>e || t.second<e)
{
ans|=(1<<i);
l=t.first; r=t.second;
}
}
printf("%d\n", ans+1);
}
}
컴파일 시 표준 에러 (stderr) 메시지
Main.cpp: In member function 'void SEG::init(int, int, int)':
Main.cpp:27:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
27 | int mid=tl+tr>>1;
| ~~^~~
Main.cpp: In member function 'void SEG::update(int, int, int, int, int, pii)':
Main.cpp:41:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
41 | int mid=tl+tr>>1;
| ~~^~~
Main.cpp: In member function 'void SEG::query(int, int, int, pii)':
Main.cpp:55:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
55 | int mid=tl+tr>>1;
| ~~^~~
Main.cpp: In member function 'pii SEG2::query(int, int, int, int, int, int)':
Main.cpp:69:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
69 | int mid=tl+tr>>1;
| ~~^~~
Main.cpp: In member function 'void SEG2::flush(int, int, int, int)':
Main.cpp:80:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
80 | int mid=tl+tr>>1;
| ~~^~~
Main.cpp: In function 'int main()':
Main.cpp:99:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
99 | scanf("%d%d%d", &N, &K, &M);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~
Main.cpp:104:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
104 | scanf("%d%d", &l, &r);
| ~~~~~^~~~~~~~~~~~~~~~
Main.cpp:117:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
117 | scanf("%d", &M);
| ~~~~~^~~~~~~~~~
Main.cpp:121:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
121 | scanf("%d%d", &s, &e);
| ~~~~~^~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |