답안 #964486

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
964486 2024-04-17T01:33:21 Z pcc The Potion of Great Power (CEOI20_potion) C++17
70 / 100
3000 ms 151360 KB
#include <bits/stdc++.h>
using namespace std;

#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,popcnt,sse4")
#define pii pair<int,int>
#define fs first
#define sc second

const int mxn = 2e5+10;

int nid[mxn*100],val[mxn*100];
int vcnt = 0;

struct node{
	int head;
	int pl,pr;
};

int add(int now,int v){
	vcnt++;
	nid[vcnt] = now;
	val[vcnt] = v;
	return vcnt;
}

struct SEG{
#define mid ((l+r)>>1)
#define ls seg[now].pl
#define rs seg[now].pr
	node seg[mxn*50];
	int ppp = 0;
	SEG(){}
	int newnode(){
		return ++ppp;
	}
	int modify(int now,int l,int r,int s,int e,int v){
		if(!now)now = newnode();
		if(l>=s&&e>=r){
			seg[now].head = add(seg[now].head,v);
			return now;
		}
		if(mid>=s)ls = modify(ls,l,mid,s,e,v);
		if(mid<e)rs = modify(rs,mid+1,r,s,e,v);
		return now;
	}
	vector<int> re;
	void getval(int now,int l,int r,int p){
		if(!now)return;
		for(int i = seg[now].head;i;i = nid[i])re.push_back(val[i]);
		if(l == r)return;
		if(mid>=p)getval(ls,l,mid,p);
		else getval(rs,mid+1,r,p);
		return;
	}
#undef ls
#undef rs
#undef mid
};

SEG seg;
int arr[mxn],N,D;
int rt[mxn];

void init(int NN, int DD, int H[]) {
	N = NN,D = DD;
	for(int i = 0;i<N;i++){
		arr[i] = H[i];
	}
	return;
}

void curseChanges(int U, int A[], int B[]) {
	map<pii,int> mp;
	for(int i = 0;i<U;i++){
		pii p = {A[i],B[i]};
		if(p.fs>p.sc)swap(p.fs,p.sc);
		if(mp.find(p) != mp.end()){
			rt[p.fs] = seg.modify(rt[p.fs],0,mxn-1,mp[p]+1,i,arr[p.sc]);
			rt[p.sc] = seg.modify(rt[p.sc],0,mxn-1,mp[p]+1,i,arr[p.fs]);
			mp.erase(p);
		}
		else{
			mp[p] = i;
		}
	}
	for(auto &i:mp){
		rt[i.fs.fs] = seg.modify(rt[i.fs.fs],0,mxn-1,i.sc+1,mxn-1,arr[i.fs.sc]);
		rt[i.fs.sc] = seg.modify(rt[i.fs.sc],0,mxn-1,i.sc+1,mxn-1,arr[i.fs.fs]);
	}
	return;
}

int question(int x, int y, int v) {
	seg.re.clear();seg.getval(rt[x],0,mxn-1,v);
	auto ta = seg.re;
	seg.re.clear();seg.getval(rt[y],0,mxn-1,v);
	auto tb = seg.re;
	assert(ta.size()<=500);
	assert(tb.size()<=500);
	sort(ta.begin(),ta.end());
	sort(tb.begin(),tb.end());
	int pt = 0;
	int ans = 1e9;
	for(auto &i:ta){
		while(pt != tb.size()&&tb[pt]<i)pt++;
		if(pt != tb.size())ans = min(ans,abs(i-tb[pt]));
		if(pt-1>=0)ans = min(ans,abs(i-tb[pt-1]));
	}
	return ans;
}

Compilation message

potion.cpp: In function 'int question(int, int, int)':
potion.cpp:106:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  106 |   while(pt != tb.size()&&tb[pt]<i)pt++;
      |         ~~~^~~~~~~~~~~~
potion.cpp:107:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  107 |   if(pt != tb.size())ans = min(ans,abs(i-tb[pt]));
      |      ~~~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6488 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 6488 KB Output is correct
2 Correct 3 ms 6488 KB Output is correct
3 Correct 2 ms 6488 KB Output is correct
4 Correct 12 ms 7056 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 399 ms 151132 KB Output is correct
2 Correct 408 ms 151360 KB Output is correct
3 Correct 198 ms 57980 KB Output is correct
4 Correct 1695 ms 98876 KB Output is correct
5 Correct 745 ms 128256 KB Output is correct
6 Correct 2405 ms 113104 KB Output is correct
7 Correct 598 ms 124004 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 381 ms 151116 KB Output is correct
2 Correct 1430 ms 77356 KB Output is correct
3 Correct 1356 ms 116464 KB Output is correct
4 Correct 2294 ms 113196 KB Output is correct
5 Correct 497 ms 148816 KB Output is correct
6 Correct 2282 ms 112964 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 46 ms 13908 KB Output is correct
2 Correct 61 ms 10072 KB Output is correct
3 Correct 84 ms 9664 KB Output is correct
4 Correct 600 ms 11736 KB Output is correct
5 Correct 605 ms 13164 KB Output is correct
6 Correct 81 ms 11548 KB Output is correct
7 Correct 454 ms 10584 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6488 KB Output is correct
2 Correct 3 ms 6488 KB Output is correct
3 Correct 3 ms 6488 KB Output is correct
4 Correct 2 ms 6488 KB Output is correct
5 Correct 12 ms 7056 KB Output is correct
6 Correct 399 ms 151132 KB Output is correct
7 Correct 408 ms 151360 KB Output is correct
8 Correct 198 ms 57980 KB Output is correct
9 Correct 1695 ms 98876 KB Output is correct
10 Correct 745 ms 128256 KB Output is correct
11 Correct 2405 ms 113104 KB Output is correct
12 Correct 598 ms 124004 KB Output is correct
13 Correct 381 ms 151116 KB Output is correct
14 Correct 1430 ms 77356 KB Output is correct
15 Correct 1356 ms 116464 KB Output is correct
16 Correct 2294 ms 113196 KB Output is correct
17 Correct 497 ms 148816 KB Output is correct
18 Correct 2282 ms 112964 KB Output is correct
19 Correct 46 ms 13908 KB Output is correct
20 Correct 61 ms 10072 KB Output is correct
21 Correct 84 ms 9664 KB Output is correct
22 Correct 600 ms 11736 KB Output is correct
23 Correct 605 ms 13164 KB Output is correct
24 Correct 81 ms 11548 KB Output is correct
25 Correct 454 ms 10584 KB Output is correct
26 Correct 760 ms 67740 KB Output is correct
27 Correct 1742 ms 116416 KB Output is correct
28 Correct 1644 ms 135300 KB Output is correct
29 Correct 1781 ms 99136 KB Output is correct
30 Execution timed out 3100 ms 113148 KB Time limit exceeded
31 Halted 0 ms 0 KB -