이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
//#include "railroad.h"
using namespace std;
const int INF = 1e9;
struct SegTree {
struct Node {
int ma, sum;
Node(int m1, int m2) : ma(m1), sum(m2) {}
Node(int v) : ma(v), sum(v) {}
Node() : ma(-INF),sum(0) {}
};
vector<Node> seg;
int MAX;
SegTree(int N) {
int i;
for(i=1;i<2*N;i*=2) {}
seg.resize(i);
MAX = i;
}
Node f(Node x, Node y) {
return Node(max(x.ma,y.ma),x.sum+y.sum);
}
void cons() {
for(register int i = MAX/2-1; i>0; i--) {
seg[i] = f(seg[2*i],seg[2*i+1]);
}
}
Node sum(int s, int e, int n, int ns, int ne) {
if(e<=ns||ne<=s) return Node();
if(s<=ns&&ne<=e) return seg[n];
int mid = ns + ne >> 1;
return f(sum(s,e,2*n,ns,mid),sum(s,e,2*n+1,mid,ne));
}
void update(int n) {
n += MAX/2;
n /= 2;
while(n) {
seg[n] = f(seg[2*n],seg[2*n+1]);
n /= 2;
}
}
void Plus(int n, int a) {
int b = seg[n+MAX/2].ma;
seg[n+MAX/2] = Node(b+a);
update(n);
}
void Edit(int n, int a) {
seg[n+MAX/2] = Node(a);
update(n);
}
Node sum(int s, int e) {
if(s >= e) return Node();
return sum(s, e, 1, 0, MAX/2);
}
int FindLeft(int s, int e) {
if(s == e) return INF;
if(s + 1 == e) {
if(seg[s+MAX/2].ma==1) return s;
else return INF;
}
int mid = s + e >> 1;
if(sum(s, mid).ma == 1) return FindLeft(s, mid);
return FindLeft(mid, e);
}
};
typedef pair<int,int> P;
vector<int> B;
int getidx(int n) {
return lower_bound(B.begin(),B.end(),n) - B.begin();
}
long long plan_roller_coaster(vector<int> s,vector<int> t) {
int N = s.size();
int i;
for(i=0;i<N;i++) {
B.push_back(s[i]);
B.push_back(t[i]);
}
sort(B.begin(),B.end());
B.erase(unique(B.begin(),B.end()),B.end());
vector<vector<int> > Q1, Q2;
Q1.resize(B.size());
Q2.resize(B.size());
for(i=0;i<N;i++) {
int n = getidx(s[i]);
Q1[n].push_back(i);
int m = getidx(t[i]);
Q2[m].push_back(i);
}
int cnt1 = 0;
int cnt2 = 0;
set<int> S;
for(i=B.size()-1;i>=0;i--) {
for(int n : Q1[i]) {
cnt1++;
S.insert(i);
}
for(int n : Q2[i]) {
cnt2++;
if(S.find(i) != S.end()) {
cnt1++;
}
}
if(cnt2 > cnt1 + 1) return 1;
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
railroad.cpp: In member function 'SegTree::Node SegTree::sum(int, int, int, int, int)':
railroad.cpp:31:22: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
31 | int mid = ns + ne >> 1;
| ~~~^~~~
railroad.cpp: In member function 'int SegTree::FindLeft(int, int)':
railroad.cpp:61:21: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
61 | int mid = s + e >> 1;
| ~~^~~
railroad.cpp: In function 'long long int plan_roller_coaster(std::vector<int>, std::vector<int>)':
railroad.cpp:93:17: warning: unused variable 'n' [-Wunused-variable]
93 | for(int n : Q1[i]) {
| ^
railroad.cpp:97:17: warning: unused variable 'n' [-Wunused-variable]
97 | for(int n : Q2[i]) {
| ^
# | 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... |