제출 #1128695

#제출 시각아이디문제언어결과실행 시간메모리
1128695VietnowSimple game (IZhO17_game)C++20
100 / 100
333 ms34632 KiB
#include <bits/stdc++.h> #define yes cout<<"YES\n" #define no cout<<"NO\n" #define int long long #define ff first #define ss second #define pb push_back #define y1 zildjian #define left radio #define right head using namespace std; const int N = 1e6+1; const int INF = 1e18; const int mod = 1e9+7; const int mod1 = 998244353; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); int t[N*4]; int lazy[N*4]; void push(int v, int tl, int tr){ if(lazy[v]){ t[v] += (tr-tl+1)*lazy[v]; if(tl!=tr){ lazy[v*2] += lazy[v]; lazy[v*2+1] += lazy[v]; } lazy[v] = 0; } } void upd(int v, int tl, int tr, int l, int r, int x){ push(v,tl,tr); if(tl>r || tr<l) return; if(tl>=l && tr<=r){ lazy[v]+=x; push(v,tl,tr); return; } int m = (tl+tr)/2; upd(v*2,tl,m,l,r,x); upd(v*2+1,m+1,tr,l,r,x); t[v] = t[v*2]+t[v*2+1]; } int get(int v, int tl, int tr, int x){ push(v,tl,tr); if(tl == tr){ return t[v]; } int m = (tl+tr)/2; if(x<=m) return get(v*2,tl,m,x); else return get(v*2+1,m+1,tr,x); } int n,m; int h[N]; void solve(){ cin>>n>>m; for(int i = 1;i<=n;i++){ cin>>h[i]; } for(int i = 1;i<n;i++){ upd(1,1,N-1,min(h[i],h[i+1]),max(h[i],h[i+1]),1); } while(m--){ int t; cin>>t; if(t == 1){ int pos,val; cin>>pos>>val; if(n == 1) continue; if(pos != n){ upd(1,1,N-1,min(h[pos],h[pos+1]),max(h[pos],h[pos+1]),-1); } if(pos != 1){ upd(1,1,N-1,min(h[pos],h[pos-1]),max(h[pos],h[pos-1]),-1); } h[pos] = val; if(pos != n){ upd(1,1,N-1,min(h[pos],h[pos+1]),max(h[pos],h[pos+1]),1); } if(pos != 1){ upd(1,1,N-1,min(h[pos],h[pos-1]),max(h[pos],h[pos-1]),1); } } else{ int x; cin>>x; cout<<get(1,1,N-1,x)<<'\n'; } } } signed main(){ // freopen("bootfall.in","r",stdin); // freopen("bootfall.out","w",stdout); ios_base::sync_with_stdio(0); cin.tie(nullptr); // cout.tie(nullptr); int t = 1; // cin>>t; for(int i = 1;i<=t;i++){ // cout<<"Case "<<i<<": "; solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...