Submission #1046966

# Submission time Handle Problem Language Result Execution time Memory
1046966 2024-08-07T07:05:21 Z 김은성(#11022) Sweeping (JOI20_sweeping) C++17
11 / 100
1383 ms 43196 KB
#include <bits/stdc++.h>
using namespace std;
const int INF = 1234123423;
int x00[1500009], y00[1500009];
int treex[1<<22], treey[1<<22], lazyx[1<<22], lazyy[1<<22];	//max value stored for x, max value for y
int ansx[1500009], ansy[1500009];
void dolazy(int v, bool op){
	treex[v] = max(lazyx[v], treex[v]);
	treey[v] = max(lazyy[v], treey[v]);
	if(!op){
		lazyx[2*v] = max(lazyx[2*v], lazyx[v]);
		lazyx[2*v+1] = max(lazyx[2*v+1], lazyx[v]);
		lazyy[2*v] = max(lazyy[2*v], lazyy[v]);
		lazyy[2*v+1] = max(lazyy[2*v+1], lazyy[v]);
	}
	lazyx[v] = 0;
	lazyy[v] = 0;
}
void settree(int v, int l, int r){
	if(l==r){
		treex[v] = x00[l];
		treey[v] = y00[l];
		lazyx[v] = 0;
		lazyy[v] = 0;
	}
	else{
		int mid = (l+r)/2;
		settree(2*v, l, mid);
		settree(2*v+1, mid+1, r);
		treex[v] = max(treex[2*v], treex[2*v+1]);
		treey[v] = max(treey[2*v], treey[2*v+1]);
		lazyx[v] = 0;
		lazyy[v] = 0;
	}
}
int boundx(int v, int l, int r, int crit){	//maximum i such that x[i] <= crit
	if(l==r){
		if(treex[v] > crit)
			return l-1;
		return l;
	}
	int mid = (l+r)/2;
	dolazy(v, l==r);
	dolazy(2*v, l==mid);
	dolazy(2*v+1, mid+1==r);
	if(treex[2*v] <= crit)
		return boundx(2*v+1, mid+1, r, crit);
	return boundx(2*v, l, mid, crit);
}
int boundy(int v, int l, int r, int crit){	//minimum i such that y[i] <= crit
	if(l==r){
		if(treey[v] > crit)
			return l+1;
		return l;
	}
	int mid = (l+r)/2;
	dolazy(v, l==r);
	dolazy(2*v, l==mid);
	dolazy(2*v+1, mid+1==r);
	if(treey[2*v+1] <= crit)
		return boundy(2*v, l, mid, crit);
	return boundy(2*v+1, mid+1, r, crit);
}
void updatex(int v, int l, int r, int s, int e, int val){
	dolazy(v, l==r);
	if(e<l || r<s)
		return;
	if(s<=l && r<=e){
		treex[v] = max(treex[v], val);
		if(l != r){
			lazyx[2*v] = max(lazyx[2*v], val);
			lazyx[2*v+1] = max(lazyx[2*v+1], val);
		}
		return;
	}
	int mid = (l+r)/2;
	updatex(2*v, l, mid, s,e, val);
	updatex(2*v+1, mid+1, r, s, e, val);
	treex[v] = max(treex[2*v], treex[2*v+1]);
	treey[v] = max(treey[2*v], treey[2*v+1]);
}
void updatey(int v, int l, int r, int s, int e, int val){
	dolazy(v, l==r);
	if(e<l || r<s)
		return;
	if(s<=l && r<=e){
		treey[v] = max(treey[v], val);
		if(l != r){
			lazyy[2*v] = max(lazyy[2*v], val);
			lazyy[2*v+1] = max(lazyy[2*v+1], val);
		}
		return;
	}
	int mid = (l+r)/2;
	updatey(2*v, l, mid, s, e, val);
	updatey(2*v+1, mid+1, r, s, e, val);
	treex[v] = max(treex[2*v], treex[2*v+1]);
	treey[v] = max(treey[2*v], treey[2*v+1]);
}
pair<int, int> solve(int v, int l, int r, int p){
	dolazy(v, l==r);
	if(l==r){
		return make_pair(treex[v],treey[v]);
	}
	int mid = (l+r)/2;
	pair<int, int> ans;
	if(p <= mid)
		ans = solve(2*v, l, mid, p);
	else
		ans = solve(2*v+1, mid+1, r, p);
	treex[v] = max(treex[2*v], treex[2*v+1]);
	treey[v] = max(treey[2*v], treey[2*v+1]);
	return ans;
}
int main(){
	int n, m, q, i, j, t, p, l, a, b;
	scanf("%d %d %d", &n, &m, &q);
	for(i=1; i<=m; i++){
		scanf("%d %d", &x00[i], &y00[i]);
	}
	settree(1, 1, m);
	for(i=0; i<q; i++){
		scanf("%d", &t);
		if(t==1){
			scanf("%d", &p);
			pair<int, int> res = solve(1,  1, m, p);
			printf("%d %d\n", res.first, res.second);
		}
		else if(t==3){
			scanf("%d", &l);
			//printf("bound=%d\n", boundx(1, 1, m, l));
			updatey(1, 1, m, 1, boundx(1, 1, m, l), n-l);
		}
		else if(t==2){
			scanf("%d", &l);
			//printf("bound=%d\n", boundy(1, 1, m, l));
			updatex(1, 1, m, boundy(1, 1, m, l), m, n-l);
		}
		else{
			scanf("%d %d", &a, &b);
		}
	}
	return 0;
}

Compilation message

sweeping.cpp: In function 'int main()':
sweeping.cpp:116:18: warning: unused variable 'j' [-Wunused-variable]
  116 |  int n, m, q, i, j, t, p, l, a, b;
      |                  ^
sweeping.cpp:117:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  117 |  scanf("%d %d %d", &n, &m, &q);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
sweeping.cpp:119:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  119 |   scanf("%d %d", &x00[i], &y00[i]);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
sweeping.cpp:123:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  123 |   scanf("%d", &t);
      |   ~~~~~^~~~~~~~~~
sweeping.cpp:125:9: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  125 |    scanf("%d", &p);
      |    ~~~~~^~~~~~~~~~
sweeping.cpp:130:9: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  130 |    scanf("%d", &l);
      |    ~~~~~^~~~~~~~~~
sweeping.cpp:135:9: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  135 |    scanf("%d", &l);
      |    ~~~~~^~~~~~~~~~
sweeping.cpp:140:9: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  140 |    scanf("%d %d", &a, &b);
      |    ~~~~~^~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 12636 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1132 ms 43180 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 948 ms 43196 KB Output is correct
2 Correct 962 ms 43088 KB Output is correct
3 Correct 968 ms 42496 KB Output is correct
4 Correct 954 ms 43048 KB Output is correct
5 Correct 981 ms 43092 KB Output is correct
6 Correct 919 ms 43004 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 948 ms 43196 KB Output is correct
2 Correct 962 ms 43088 KB Output is correct
3 Correct 968 ms 42496 KB Output is correct
4 Correct 954 ms 43048 KB Output is correct
5 Correct 981 ms 43092 KB Output is correct
6 Correct 919 ms 43004 KB Output is correct
7 Incorrect 1383 ms 42940 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 12636 KB Output isn't correct
2 Halted 0 ms 0 KB -