Submission #1635962
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) REP(i,0,n)
#define REP(i,s,e) for(int i=(s); i<(int)(e); i++)
#define repr(i, n) REPR(i, n, 0)
#define REPR(i, s, e) for(int i=(int)(s-1); i>=(int)(e); i--)
#define pb push_back
#define all(r) (r).begin(),(r).end()
#define rall(r) (r).rbegin(),(r).rend()
#define fi first
#define se second
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int INF = 1e9;
const ll MOD = 1e9 + 7;
double EPS = 1e-8;
// 区間加算 最小値取得
template <typename T>
struct SegTree {
vector<T> segVal;
vector<T> segAdd;
int n;
const T Default;
const T MAX;
SegTree(int n_, const T& def, const T& MAX) : Default(def), MAX(MAX) {init(n_);}
void init(int n_) {
n = 1;
while (n < n_) n *= 2;
segVal = vector<T>(2 * n - 1, Default);
segAdd = vector<T>(2 * n - 1);
}
T f(const T& a, const T& b) {
return min(a, b);
}
void add(int a, int b, const T& x) {
add(a, b, x, 0, 0, n);
}
void add(int a, int b, const T& x, int k, int l, int r) {
if (r <= a || b <= l) return; //もし交差しない区間であれば終える.
if (a <= l && r <= b) { //もし今みている区間[l, r)が[a, b)に完全に内包されていれば
segAdd[k] += x; //区間[l, r)にkを加算する.
return;
}
add(a, b, x, k * 2 + 1, l, (l + r) / 2); //子の区間に(必要があれば)xを加算する.
add(a, b, x, k * 2 + 2, (l + r) / 2, r); //〃
//親の区間の最小値は, 子の区間の最小値 + 自分に一様に加算されている値 である.一様に加算される値は更新しなくて良い.
segVal[k] = min(segVal[k * 2 + 1] + segAdd[k * 2 + 1], segVal[k * 2 + 2] + segAdd[k * 2 + 2]);
}
T query(int a, int b, int k, int l, int r ) {
if (r <= a || b <= l) return (MAX);
if (a <= l && r <= b) return (segVal[k] + segAdd[k]); //完全に内包されていれば,その区間の最小値を返す.
T left = query(a, b, k * 2 + 1, l, (l + r) / 2); //子の区間の最小値を求める.
T right = query(a, b, k * 2 + 2, (l + r) / 2, r); //子の区間の最小値を求める
return (f(left, right) + segAdd[k]); //親の区間の最小値は, 子の区間の最小値 + 自分に一様に加算されている値 である (大切なので2回書きました!!)
}
T query(int a, int b) {
return query(a, b, 0, 0, n);
}
};
int main() {
#ifdef LOCAL_TEST
freopen("in", "r", stdin);
freopen("out", "w", stdout);
#endif
// cerr << "Start" << endl;
int n, m;
cin >> n >> m;
SegTree<ll> st(n, 0LL, 1e18);
vi s(m), t(m);
rep(i, m) {
cin >> s[i] >> t[i];
s[i]--;
st.add(s[i], t[i], 1);
}
if (st.query(0, n) == 0) {
cout << 0 << endl;
return 0;
}
vector<int> ans;
rep(i, m) {
st.add(s[i], t[i], -1);
// cerr << s[i] << " " << t[i] << " " << st.query(s[i], t[i]) << endl;
if (st.query(s[i], t[i]) != 0) ans.pb(i + 1);
st.add(s[i], t[i], +1);
}
cout << ans.size() << endl;
for (auto& a : ans) cout << a << endl;
return 0;
}
Submission Info
Submission Time |
|
Task |
B - ドキドキデート大作戦高橋君 |
User |
T1610 |
Language |
C++14 (GCC 5.4.1) |
Score |
100 |
Code Size |
3445 Byte |
Status |
AC |
Exec Time |
392 ms |
Memory |
18552 KB |
Judge Result
Set Name |
Sample |
Subtask1 |
All |
Score / Max Score |
0 / 0 |
30 / 30 |
70 / 70 |
Status |
|
|
|
Set Name |
Test Cases |
Sample |
subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt |
Subtask1 |
subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt |
All |
subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt |
Case Name |
Status |
Exec Time |
Memory |
subtask0_sample_01.txt |
AC |
1 ms |
256 KB |
subtask0_sample_02.txt |
AC |
1 ms |
256 KB |
subtask0_sample_03.txt |
AC |
1 ms |
256 KB |
subtask1_01.txt |
AC |
140 ms |
17408 KB |
subtask1_02.txt |
AC |
284 ms |
18552 KB |
subtask1_03.txt |
AC |
126 ms |
9216 KB |
subtask1_04.txt |
AC |
233 ms |
9852 KB |
subtask1_05.txt |
AC |
234 ms |
9852 KB |
subtask1_06.txt |
AC |
1 ms |
256 KB |
subtask1_07.txt |
AC |
1 ms |
256 KB |
subtask1_08.txt |
AC |
1 ms |
256 KB |
subtask1_09.txt |
AC |
1 ms |
256 KB |
subtask2_01.txt |
AC |
255 ms |
18552 KB |
subtask2_02.txt |
AC |
340 ms |
18552 KB |
subtask2_03.txt |
AC |
2 ms |
256 KB |
subtask2_04.txt |
AC |
2 ms |
256 KB |
subtask2_05.txt |
AC |
2 ms |
256 KB |
subtask2_06.txt |
AC |
1 ms |
256 KB |
subtask2_07.txt |
AC |
2 ms |
256 KB |
subtask2_08.txt |
AC |
392 ms |
10360 KB |