답안 #654620

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
654620 2022-10-31T23:33:14 Z sunwukong123 Abracadabra (CEOI22_abracadabra) C++14
100 / 100
699 ms 82748 KB
#include <bits/stdc++.h>
using namespace std;
#define int ll 
#define FOR(i,s,e) for(ll i = s; i <= (ll)e; ++i)
#define DEC(i,s,e) for(ll i = s; i >= (ll)e; --i)
#define IAMSPEED ios_base::sync_with_stdio(false); cin.tie(0);
#ifdef LOCAL
#define db(x) cerr << #x << "=" << x << "\n"
#define db2(x, y) cerr << #x << "=" << x << " , " << #y << "=" << y << "\n"
#define db3(a,b,c) cerr<<#a<<"="<<a<<","<<#b<<"="<<b<<","<<#c<<"="<<c<<"\n"
#define dbv(v) cerr << #v << ":"; for (auto ite : v) cerr << ite << ' '; cerr <<"\n"
#define dbvp(v) cerr << #v << ":"; for (auto ite : v) cerr << "{"  << ite.f << ',' << ite.s << "} "; cerr << "\n"
#define dba(a,ss,ee) cerr << #a << ":"; FOR(ite,ss,ee) cerr << a[ite] << ' '; cerr << "\n"
#else
#define db(x)
#define db2(x,y)
#define db3(a,b,c)
#define dbv(v)
#define dbvp(v)
#define dba(a,ss,ee)
#endif
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define ll long long 
#define pb push_back
#define eb emplace_back
#define all(x) (x).begin(), (x).end()
#define f first 	
#define s second
#define g0(x) get<0>(x)
#define g1(x) get<1>(x)
#define g2(x) get<2>(x)
#define g3(x) get<3>(x)
#define reach cerr << "LINE: " << __LINE__ << "\n";
typedef pair <ll, ll> pi;
typedef tuple<ll,ll,ll> ti3;
typedef tuple<ll,ll,ll,ll> ti4;
ll rand(ll a, ll b) { return a + rng() % (b-a+1); }
const int MOD = 1e9 + 7;
const int inf = (int)1e9 + 500;
const long long oo = (ll)1e18 + 500;
template <typename T> bool chmax(T& a, const T b) { return a<b ? a = b, 1 : 0; }
template <typename T> bool chmin(T& a, const T b) { return a>b ? a = b, 1 : 0; }
const int MAXN = 1000005;
int n,q;
map<int,int> val;
int A[MAXN];
int nxt[MAXN];
int where[MAXN];
int fw[MAXN];
vector<pi> Qs[MAXN];
int out[MAXN];
set<int> s;
void update(int x, int nval) {
	for(;x<MAXN;x+=x&-x)fw[x]+=nval;
}
int sum(int x) {
	int r=0;
	for(;x;x-=x&-x)r+=fw[x];
	return r;
}
int kth(int &k){
    int csum = 0;
    int pos = 0;
    for (int i = 20; i >= 0; i--){
        if (pos + (1 << i) < n && fw[pos + (1 << i)] < k){
            pos += (1 << i);
            k-=fw[pos];
        }
    }
    return pos + 1;
}


int32_t main() 
{
	IAMSPEED
	cin >> n >> q;
	FOR(i,1,n) cin >> A[i];
	FOR(qq,1,q) {
		int t, x; cin >> t >> x;
		Qs[min(t,n)].pb(pi(x,qq));
	}
	FOR(i,1,n) where[A[i]] = i;
	stack<int> st;
	DEC(i,n,1) {
		while(st.size() && A[i] > st.top())st.pop();
		if(st.empty())nxt[i]=n+1;
		else {
			nxt[i]=where[st.top()];
		}
		st.push(A[i]);
	}
	
	int it=1;
	while(it<=n) {

		update(A[it], nxt[it] - it);
		it=nxt[it];
	}
	FOR(ti,0,n) {

		for(auto query:Qs[ti]) {
			int val=kth(query.f);
			out[query.s]=A[where[val]+query.f-1];
			
		}
		int m=n/2+1;
		int val=kth(m);
		if(m==1) continue;
		int len=sum(val) - sum(val-1);
		int ed=where[val] + len;
		update(val, -len + m - 1);
		
		for(int id=where[val]+m-1;id<ed;id=nxt[id]) {
			update(A[id], min(nxt[id],ed) - id);
		}
		
		
	}
	FOR(i,1,q)cout<<out[i]<<"\n";
	
}


Compilation message

Main.cpp: In function 'long long int kth(long long int&)':
Main.cpp:62:9: warning: unused variable 'csum' [-Wunused-variable]
   62 |     int csum = 0;
      |         ^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 270 ms 55680 KB Output is correct
2 Correct 307 ms 58012 KB Output is correct
3 Correct 301 ms 57944 KB Output is correct
4 Correct 229 ms 57076 KB Output is correct
5 Correct 272 ms 62312 KB Output is correct
6 Correct 246 ms 60148 KB Output is correct
7 Correct 262 ms 63496 KB Output is correct
8 Correct 250 ms 57648 KB Output is correct
9 Correct 248 ms 57240 KB Output is correct
10 Correct 255 ms 57376 KB Output is correct
11 Correct 238 ms 56672 KB Output is correct
12 Correct 228 ms 54832 KB Output is correct
13 Correct 260 ms 55244 KB Output is correct
14 Correct 266 ms 60612 KB Output is correct
15 Correct 248 ms 57996 KB Output is correct
16 Correct 13 ms 23936 KB Output is correct
17 Correct 261 ms 55972 KB Output is correct
18 Correct 218 ms 55792 KB Output is correct
19 Correct 12 ms 23892 KB Output is correct
20 Correct 13 ms 23828 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 329 ms 60120 KB Output is correct
2 Correct 356 ms 74060 KB Output is correct
3 Correct 298 ms 64364 KB Output is correct
4 Correct 278 ms 61816 KB Output is correct
5 Correct 274 ms 62528 KB Output is correct
6 Correct 256 ms 62904 KB Output is correct
7 Correct 332 ms 68564 KB Output is correct
8 Correct 374 ms 69308 KB Output is correct
9 Correct 301 ms 62128 KB Output is correct
10 Correct 313 ms 67704 KB Output is correct
11 Correct 244 ms 60240 KB Output is correct
12 Correct 263 ms 59472 KB Output is correct
13 Correct 287 ms 67484 KB Output is correct
14 Correct 254 ms 63692 KB Output is correct
15 Correct 301 ms 70752 KB Output is correct
16 Correct 43 ms 30964 KB Output is correct
17 Correct 296 ms 67056 KB Output is correct
18 Correct 207 ms 56844 KB Output is correct
19 Correct 86 ms 37840 KB Output is correct
20 Correct 100 ms 38808 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 76 ms 31052 KB Output is correct
2 Correct 77 ms 31896 KB Output is correct
3 Correct 76 ms 31296 KB Output is correct
4 Correct 56 ms 31052 KB Output is correct
5 Correct 80 ms 31104 KB Output is correct
6 Correct 59 ms 30792 KB Output is correct
7 Correct 75 ms 31176 KB Output is correct
8 Correct 61 ms 30884 KB Output is correct
9 Correct 65 ms 30932 KB Output is correct
10 Correct 51 ms 30852 KB Output is correct
11 Correct 60 ms 31292 KB Output is correct
12 Correct 61 ms 30972 KB Output is correct
13 Correct 60 ms 30596 KB Output is correct
14 Correct 54 ms 30992 KB Output is correct
15 Correct 50 ms 30784 KB Output is correct
16 Correct 25 ms 27212 KB Output is correct
17 Correct 66 ms 30744 KB Output is correct
18 Correct 45 ms 29252 KB Output is correct
19 Correct 13 ms 23828 KB Output is correct
20 Correct 13 ms 23832 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 270 ms 55680 KB Output is correct
2 Correct 307 ms 58012 KB Output is correct
3 Correct 301 ms 57944 KB Output is correct
4 Correct 229 ms 57076 KB Output is correct
5 Correct 272 ms 62312 KB Output is correct
6 Correct 246 ms 60148 KB Output is correct
7 Correct 262 ms 63496 KB Output is correct
8 Correct 250 ms 57648 KB Output is correct
9 Correct 248 ms 57240 KB Output is correct
10 Correct 255 ms 57376 KB Output is correct
11 Correct 238 ms 56672 KB Output is correct
12 Correct 228 ms 54832 KB Output is correct
13 Correct 260 ms 55244 KB Output is correct
14 Correct 266 ms 60612 KB Output is correct
15 Correct 248 ms 57996 KB Output is correct
16 Correct 13 ms 23936 KB Output is correct
17 Correct 261 ms 55972 KB Output is correct
18 Correct 218 ms 55792 KB Output is correct
19 Correct 12 ms 23892 KB Output is correct
20 Correct 13 ms 23828 KB Output is correct
21 Correct 329 ms 60120 KB Output is correct
22 Correct 356 ms 74060 KB Output is correct
23 Correct 298 ms 64364 KB Output is correct
24 Correct 278 ms 61816 KB Output is correct
25 Correct 274 ms 62528 KB Output is correct
26 Correct 256 ms 62904 KB Output is correct
27 Correct 332 ms 68564 KB Output is correct
28 Correct 374 ms 69308 KB Output is correct
29 Correct 301 ms 62128 KB Output is correct
30 Correct 313 ms 67704 KB Output is correct
31 Correct 244 ms 60240 KB Output is correct
32 Correct 263 ms 59472 KB Output is correct
33 Correct 287 ms 67484 KB Output is correct
34 Correct 254 ms 63692 KB Output is correct
35 Correct 301 ms 70752 KB Output is correct
36 Correct 43 ms 30964 KB Output is correct
37 Correct 296 ms 67056 KB Output is correct
38 Correct 207 ms 56844 KB Output is correct
39 Correct 86 ms 37840 KB Output is correct
40 Correct 100 ms 38808 KB Output is correct
41 Correct 76 ms 31052 KB Output is correct
42 Correct 77 ms 31896 KB Output is correct
43 Correct 76 ms 31296 KB Output is correct
44 Correct 56 ms 31052 KB Output is correct
45 Correct 80 ms 31104 KB Output is correct
46 Correct 59 ms 30792 KB Output is correct
47 Correct 75 ms 31176 KB Output is correct
48 Correct 61 ms 30884 KB Output is correct
49 Correct 65 ms 30932 KB Output is correct
50 Correct 51 ms 30852 KB Output is correct
51 Correct 60 ms 31292 KB Output is correct
52 Correct 61 ms 30972 KB Output is correct
53 Correct 60 ms 30596 KB Output is correct
54 Correct 54 ms 30992 KB Output is correct
55 Correct 50 ms 30784 KB Output is correct
56 Correct 25 ms 27212 KB Output is correct
57 Correct 66 ms 30744 KB Output is correct
58 Correct 45 ms 29252 KB Output is correct
59 Correct 13 ms 23828 KB Output is correct
60 Correct 13 ms 23832 KB Output is correct
61 Correct 699 ms 80700 KB Output is correct
62 Correct 651 ms 82748 KB Output is correct
63 Correct 689 ms 78280 KB Output is correct
64 Correct 481 ms 78036 KB Output is correct
65 Correct 498 ms 81952 KB Output is correct
66 Correct 532 ms 78316 KB Output is correct
67 Correct 427 ms 77392 KB Output is correct
68 Correct 461 ms 75908 KB Output is correct
69 Correct 527 ms 78884 KB Output is correct
70 Correct 455 ms 73496 KB Output is correct
71 Correct 412 ms 76380 KB Output is correct
72 Correct 425 ms 72560 KB Output is correct
73 Correct 415 ms 74304 KB Output is correct
74 Correct 460 ms 78288 KB Output is correct
75 Correct 371 ms 73420 KB Output is correct
76 Correct 38 ms 30544 KB Output is correct
77 Correct 442 ms 66236 KB Output is correct
78 Correct 277 ms 64624 KB Output is correct
79 Correct 13 ms 23892 KB Output is correct
80 Correct 13 ms 23892 KB Output is correct