제출 #1149538

#제출 시각아이디문제언어결과실행 시간메모리
1149538henriessStone Arranging 2 (JOI23_ho_t1)C++20
25 / 100
2095 ms26948 KiB
#include <bits/stdc++.h> using namespace std; //segment tree?? vector<long long>A; struct node{ node *left,*right; long long S,E,M; long long val; long long lazy; node (long long s,long long e):S(s), E(e){ val = 0; left = nullptr; right = nullptr; lazy = 0; } void prop(){ if (S == E){ return; } M = (S + E) / 2; if (left == nullptr){ left = new node(S,M); right = new node(M+1,E); } if (lazy != 0){ left->val = lazy; right->val = lazy; right->lazy = lazy; left->lazy = lazy; lazy = 0; } } long long qry(long long l,long long r){ if (l > E || r < S){ return 0; } else if (l <= S && r >= E){ return val; } prop(); return left->qry(l,r) + right->qry(l,r); } void upd(long long l,long long r,long long v){ if (l > E || r < S){ return; } if (l <= S && E <= r){ val = v; lazy = v; return; } prop(); left->upd(l,r,v); right->upd(l,r,v); val = left->val + right->val; } long long find(long long x){ if (S == E){ if (val == x){ return S; } else{ return -1; } } prop(); long long ret = right->find(x); if (ret != -1){ return ret; } long long ret2 = left->find(x); return ret2; } }*segtree; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long n;cin >> n; A.resize(n); segtree = new node(0,n-1); for(int i = 0;i<n;i++){ cin >> A[i] ; } //put the stones in order for(int i = 0;i<n;i++){ if (i == 0){ segtree->upd(i,i,A[i]); continue; } long long index = segtree->find(A[i]); if (index != -1){ segtree->upd(index,i,A[i]); } segtree->upd(i,i,A[i]); } for(int i = 0;i<n;i++){ cout << segtree->qry(i,i) << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...