Submission #1635908
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;
static const int MAX_SIZE = 1 << 19; //segment tree のサイズ。この実装では2べきにする必要がある。 2^17 ≒ 1.3 * 10^5
typedef long long Int;
Int segMin[2 * MAX_SIZE - 1], segAdd[2 * MAX_SIZE - 1];
//区間[a, b)に値xを加算する.
void add(int a, int b, int x, int k = 0, int l = 0, int r = MAX_SIZE)
{
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); //〃
//親の区間の最小値は, 子の区間の最小値 + 自分に一様に加算されている値 である.一様に加算される値は更新しなくて良い.
segMin[k] = min(segMin[k * 2 + 1] + segAdd[k * 2 + 1], segMin[k * 2 + 2] + segAdd[k * 2 + 2]);
}
Int getMin(int a, int b, int k = 0, int l = 0, int r = MAX_SIZE)
{
if (r <= a || b <= l) return (LLONG_MAX);
if (a <= l && r <= b) return (segMin[k] + segAdd[k]); //完全に内包されていれば,その区間の最小値を返す.
Int left = getMin(a, b, k * 2 + 1, l, (l + r) / 2); //子の区間の最小値を求める.
Int right = getMin(a, b, k * 2 + 2, (l + r) / 2, r); //子の区間の最小値を求める
return (min(left, right) + segAdd[k]); //親の区間の最小値は, 子の区間の最小値 + 自分に一様に加算されている値 である (大切なので2回書きました!!)
}
int main(){
#ifdef LOCAL_TEST
freopen("in", "r", stdin);
freopen("out", "w", stdout);
#endif
// cerr << "Start" << endl;
int n, m;
cin >> n >> m;
vi s(m), t(m);
rep(i, m) {
cin >> s[i] >> t[i];
s[i]--;
add(s[i], t[i], 1);
}
if(getMin(0, n) == 0) {
cout << 0 << endl;
return 0;
}
vector<int> ans;
rep(i, m) {
add(s[i], t[i], -1);
// cerr << s[i] << " " << t[i] << " " << getMin(s[i], t[i]) << endl;
if(getMin(s[i], t[i]) != 0) ans.pb(i+1);
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 |
3010 Byte |
Status |
AC |
Exec Time |
403 ms |
Memory |
13176 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 |
3 ms |
8448 KB |
subtask0_sample_02.txt |
AC |
2 ms |
6400 KB |
subtask0_sample_03.txt |
AC |
3 ms |
8448 KB |
subtask1_01.txt |
AC |
150 ms |
11264 KB |
subtask1_02.txt |
AC |
294 ms |
6776 KB |
subtask1_03.txt |
AC |
144 ms |
9216 KB |
subtask1_04.txt |
AC |
243 ms |
9852 KB |
subtask1_05.txt |
AC |
242 ms |
9852 KB |
subtask1_06.txt |
AC |
3 ms |
8448 KB |
subtask1_07.txt |
AC |
2 ms |
6400 KB |
subtask1_08.txt |
AC |
2 ms |
6400 KB |
subtask1_09.txt |
AC |
3 ms |
8448 KB |
subtask2_01.txt |
AC |
246 ms |
4216 KB |
subtask2_02.txt |
AC |
356 ms |
13176 KB |
subtask2_03.txt |
AC |
3 ms |
8448 KB |
subtask2_04.txt |
AC |
3 ms |
8448 KB |
subtask2_05.txt |
AC |
3 ms |
8448 KB |
subtask2_06.txt |
AC |
3 ms |
8448 KB |
subtask2_07.txt |
AC |
3 ms |
8448 KB |
subtask2_08.txt |
AC |
403 ms |
11128 KB |