Submission #761870

#TimeUsernameProblemLanguageResultExecution timeMemory
761870IvanJStone Arranging 2 (JOI23_ho_t1)C++17
100 / 100
214 ms31024 KiB
#include<bits/stdc++.h> #define x first #define y second #define pb push_back #define all(a) (a).begin(), (a).end() using namespace std; typedef long long ll; typedef pair<int, int> ii; const int maxn = 2e5 + 5; struct Seg { int pot; vector<int> T, L; void init(int _n) { pot = 1; while(pot < _n) pot <<= 1; for(int i = 0;i < (pot << 1);i++) T.pb(0), L.pb(0); } void prop(int x) { if(L[x]) { T[x] = L[x]; if(x < pot) L[x * 2] = L[x * 2 + 1] = L[x]; L[x] = 0; } } void update(int x, int lo, int hi, int a, int b, int v) { prop(x); if(hi < a || b < lo) return; if(a <= lo && hi <= b) { L[x] = v; prop(x); return; } int mid = (lo + hi) / 2; update(x * 2, lo, mid, a, b, v); update(x * 2 + 1, mid + 1, hi, a, b, v); } int query(int x, int lo, int hi, int X) { prop(x); if(lo == hi) return T[x]; int mid = (lo + hi) / 2; if(lo <= X && X <= mid) return query(x * 2, lo, mid, X); else return query(x * 2 + 1, mid + 1, hi, X); } void set(int lo, int hi, int v) { update(1, 0, pot - 1, lo, hi, v); } int get(int x) { return query(1, 0, pot - 1, x); } }; int n; int a[maxn]; map<int, vector<int>> pos; int main() { scanf("%d", &n); for(int i = 0;i < n;i++) scanf("%d", a + i); Seg S; S.init(n); for(int i = 0;i < n;i++) { while(pos[a[i]].size()) { int x = pos[a[i]].back(); if(S.get(x) == a[i]) { S.set(x, i - 1, a[i]); break; } pos[a[i]].pop_back(); } S.set(i, i, a[i]); pos[a[i]].pb(i); } for(int i = 0;i < n;i++) printf("%d\n", S.get(i)); return 0; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:72:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   72 |  scanf("%d", &n);
      |  ~~~~~^~~~~~~~~~
Main.cpp:74:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   74 |   scanf("%d", a + i);
      |   ~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...