CSES - UKIEPC 2016 - Results
Submission details
Task:Compensation
Sender:Game of Nolife
Submission time:2016-11-12 15:07:48 +0200
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.06 sdetails
#2ACCEPTED0.07 sdetails
#3ACCEPTED0.06 sdetails
#4ACCEPTED0.05 sdetails
#5ACCEPTED0.09 sdetails
#6ACCEPTED0.10 sdetails
#7ACCEPTED0.08 sdetails
#8ACCEPTED0.10 sdetails
#9ACCEPTED0.10 sdetails
#10ACCEPTED0.05 sdetails
#11ACCEPTED0.06 sdetails
#12ACCEPTED0.06 sdetails
#13ACCEPTED0.06 sdetails
#14ACCEPTED0.06 sdetails
#15ACCEPTED0.07 sdetails
#16ACCEPTED0.05 sdetails
#17ACCEPTED0.06 sdetails

Code

#include <bits/stdc++.h>
#define F first
#define S second
#define X real()
#define Y imag()
using namespace std;
typedef long long ll;
typedef long double ld;

const int inf=1e8;

int cb[101010];
int vv[101010][2];

vector<pair<int, int> > go[111];
vector<int> arr[111];

int n,m;

void solve(int ttt, vector<pair<int, pair<int, int> > > s){
	for (int i=1;i<=n;i++){
		go[i].clear();
		arr[i].clear();
	}
	for (auto ss:s){
		go[ss.F].push_back(ss.S);
	}
	for (int i=1;i<=n;i++){
		sort(go[i].begin(), go[i].end());
		arr[i].resize(go[i].size());
	}
	for (int i=(int)go[n-1].size()-1;i>=0;i--){
		arr[n-1][i]=go[n-1][i].S;
		if (i+1<(int)go[n-1].size()){
			arr[n-1][i]=min(arr[n-1][i], arr[n-1][i+1]);
		}
	}
	for (int i=n-2;i>=1;i--){
		for (int j=(int)go[i].size()-1;j>=0;j--){
			pair<int, int> asdf={go[i][j].S, 0};
			int id=lower_bound(go[i+1].begin(), go[i+1].end(), asdf)-go[i+1].begin();
			if (id>=(int)go[i+1].size()){
				arr[i][j]=inf;
			}
			else{
				arr[i][j]=arr[i+1][id];
			}
			if (j+1<(int)go[i].size()){
				arr[i][j]=min(arr[i][j], arr[i][j+1]);
			}
		}
	}
	int i2=(int)go[1].size()-1;
	int mv=inf;
	for (int i=90000;i>=0;i--){
		while (i2>=0&&go[1][i2].F>=i){
			mv=min(mv, arr[1][i2]);
			i2--;
		}
		vv[i][ttt]=mv;
	}
}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cin>>n>>m;
	vector<pair<int, pair<int, int> > > s1;
	vector<pair<int, pair<int, int> > > s2;
	for (int i=0;i<m;i++){
		int x,s,t,l;
		cin>>x>>s>>t>>l;
		if (x==1) cb[s]=1;
		s1.push_back({x, {s, t}});
		s2.push_back({x, {s+l, t+l}});
	}
	solve(0, s1);
	solve(1, s2);
	for (int i=0;i<=90000;i++){
		if (cb[i]&&vv[i][0]+1800<=vv[i][1]){
			cout<<i<<endl;
			return 0;
		}
	}
	cout<<"impossible"<<endl;
}

Test details

Test 1

Verdict: ACCEPTED

input
5 35
1 51823 82363 59890
2 31739 66068 17641
3 30445 42417 77902
4 49150 49816 22049
...

correct output
3895

user output
3895

Test 2

Verdict: ACCEPTED

input
99 10000
1 5192 5289 0
2 960 983 400
3 1087 1162 225
4 2324 2423 144
...

correct output
5112

user output
5112

Test 3

Verdict: ACCEPTED

input
87 10000
1 6166 6263 0
2 965 1061 256
3 5919 5962 361
4 2910 2933 196
...

correct output
6295

user output
6295

Test 4

Verdict: ACCEPTED

input
94 10000
1 5267 5267 0
2 5905 5944 484
3 2288 2344 144
4 3497 3548 100
...

correct output
5160

user output
5160

Test 5

Verdict: ACCEPTED

input
97 100000
1 5149 5174 0
2 1956 1990 5476
3 3370 3415 6400
4 3032 3068 5329
...

correct output
103

user output
103

Test 6

Verdict: ACCEPTED

input
87 100000
1 4897 4919 0
2 4428 4482 0
3 7124 7139 0
4 6095 6127 0
...

correct output
801

user output
801

Test 7

Verdict: ACCEPTED

input
96 100000
1 5415 5475 0
2 5982 5992 0
3 8410 8422 0
4 7595 7911 0
...

correct output
805

user output
805

Test 8

Verdict: ACCEPTED

input
90 100000
1 37420 38418 1
2 68502 69942 1
1 346 531 1
4 28145 29746 1
...

correct output
impossible

user output
impossible

Test 9

Verdict: ACCEPTED

input
90 100000
1 83900 85801 1
2 72188 73458 1
1 57291 58966 1
4 69743 70728 1
...

correct output
impossible

user output
impossible

Test 10

Verdict: ACCEPTED

input
5 35
1 27333 80262 47834
2 40841 56209 66265
3 37689 85312 74945
4 12123 67360 36187
...

correct output
10007

user output
10007

Test 11

Verdict: ACCEPTED

input
5 35
1 86335 86357 66676
2 4816 76697 68528
3 56889 83733 65118
4 22002 36999 16872
...

correct output
3992

user output
3992

Test 12

Verdict: ACCEPTED

input
99 31747
1 2566 2662 0
2 2938 2958 1024
3 4031 4053 2809
4 1631 1695 5476
...

correct output
4339

user output
4339

Test 13

Verdict: ACCEPTED

input
94 7549
1 2191 2258 0
2 1326 1348 6084
3 1358 1367 6241
4 2085 2095 4624
...

correct output
282

user output
282

Test 14

Verdict: ACCEPTED

input
82 35612
1 2868 2919 0
2 3794 3894 6400
3 1142 1199 361
4 2495 2519 289
...

correct output
impossible

user output
impossible

Test 15

Verdict: ACCEPTED

input
88 22965
1 4820 4918 0
2 1243 1332 625
3 895 994 2025
4 1894 1934 2601
...

correct output
128

user output
128

Test 16

Verdict: ACCEPTED

input
88 10000
1 750 761 0
2 5784 5825 144
3 5981 6044 289
4 724 743 400
...

correct output
743

user output
743

Test 17

Verdict: ACCEPTED

input
89 10000
1 4508 4554 0
2 2385 2470 361
3 314 320 225
4 2006 2034 625
...

correct output
6211

user output
6211