Submission #1120603


Source Code Expand

#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
#include <utility>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <cstdio>
#include <cstdlib>
#include <cstring>

#define INF_LL 1e18
#define INF 1e9

#define REP(i, n) for(int i = 0;i < (n);i++)
#define FOR(i, a, b) for(int i = (a);i < (b);i++)
#define all(x) x.begin(),x.end()

using namespace std;

using ll = long long;
using PII = pair<int, int>;
using PLL = pair<ll, ll>;

const ll MOD = 1e9+7;

template<typename T>
void chmax(T &a, T &b){
	a = max(a, b);
}

template<typename T>
void chmin(T &a, T &b){
	a = min(a, b);
}

class Union_find{
private:
	vector<int> par;
	vector<int> rank;
	int n;

public:
	Union_find(int a){
		n = a;
		for(int i = 0;i < n;i++){
			par.push_back(i);
			rank.push_back(0);
		}
	}

	int find(int x){
		if(par[x] == x){
			return x;
		}else{
			return par[x] = find(par[x]);
		}
	}

	void unite(int x, int y){
		x = find(x);
		y = find(y);
		if(x == y) return;

		if(rank[x] < rank[y]){
			par[x] = y;
		}else{
			par[y] = x;
			if(rank[x] == rank[y]) rank[x]++;
		}
	}

	bool same(int x, int y){
		return find(x) == find(y);
	}
};

class RMQ{
	int n;
	vector<int> dat;
public:
	RMQ(int n_){
		n = 1;
		while(n < n_) n *= 2;
		REP(i, n*2-1){
			dat.push_back(INF);
		}
	}

	void update(int x, int i){
		i += n-1;
		dat[i] = x;
		while(i > 0){
			i = (i-1)/2;
			dat[i] = min(dat[i*2+1], dat[i*2+2]);
		}
	}

	int query(int a, int b, int l, int r, int x){
		if(a <= l && r <= b) return dat[x];
		if(r <= a || b <= l) return INF;

		int res = INF;
		res = min(query(a, b, l, (l+r)/2, x*2+1), query(a, b, (l+r)/2, r, x*2+2));
		return res;
	}
	int query(int a, int b){
		return query(a, b, 0, n, 0);
	}
};

int main(void){
	int N, M;
	int s[300300], t[300300];
	int c[300300] = {};
	vector<int> res;
	cin >> N >> M;
	RMQ rmq(N+1);
	REP(i, M){
		cin >> s[i] >> t[i]; s[i]--; t[i];
		c[s[i]]++; c[t[i]]--;
	}
	rmq.update(c[0], 0);
	FOR(i, 1, N+1){
		c[i] += c[i-1];
		rmq.update(c[i], i);
	}
	REP(i, M){
		if(rmq.query(s[i], t[i]) > 1){
			res.push_back(i+1);
		}
	}
	cout << res.size() << endl;
	REP(i, res.size()){
		cout << res[i] << endl;
	}
}

Submission Info

Submission Time
Task B - ドキドキデート大作戦高橋君
User maze1230
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2359 Byte
Status AC
Exec Time 252 ms
Memory 9456 KB

Judge Result

Set Name Sample Subtask1 All
Score / Max Score 0 / 0 30 / 30 70 / 70
Status
AC × 3
AC × 12
AC × 20
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 2 ms 2560 KB
subtask0_sample_02.txt AC 2 ms 3072 KB
subtask0_sample_03.txt AC 2 ms 3456 KB
subtask1_01.txt AC 94 ms 7660 KB
subtask1_02.txt AC 242 ms 7788 KB
subtask1_03.txt AC 84 ms 5104 KB
subtask1_04.txt AC 164 ms 4976 KB
subtask1_05.txt AC 166 ms 6256 KB
subtask1_06.txt AC 2 ms 3328 KB
subtask1_07.txt AC 2 ms 3456 KB
subtask1_08.txt AC 2 ms 3328 KB
subtask1_09.txt AC 2 ms 1408 KB
subtask2_01.txt AC 226 ms 8940 KB
subtask2_02.txt AC 250 ms 9456 KB
subtask2_03.txt AC 2 ms 3456 KB
subtask2_04.txt AC 2 ms 2432 KB
subtask2_05.txt AC 2 ms 2944 KB
subtask2_06.txt AC 2 ms 3200 KB
subtask2_07.txt AC 2 ms 3456 KB
subtask2_08.txt AC 252 ms 5744 KB