void mkch(TREE2,int x,int c) { if(_t == 2) _t = 2; if(_t == 0) _t = ++t2; if(a[x] != -1) mkc(S(_t),1,low,a[x],-1); mkc(S(_t),1,low,c,1); if(_l == _r) return; M; if(x <= mid) mkch(LEFT,x,c); else mkch(RIGHT,x,c); }
int main(int argc, char *argv[]) { setIO("sample"); init(); n = gi;m = gi; for(int i = 1;i<=n;++i) c[i] = b[i] = gi; tt = n; for(int i = 1,x,y,z;i<=m;++i) { int opt = gi; switch(opt){ case 1: x = gi, y = gi,z = gi; break; case 2: x = gi, y = gi; ++tt; c[tt] = y; break; } } setIO("sample"); n = gi,m = gi; for(int i = 1,x;i<=n;++i) x = gi; sort(c+1,c+1+tt); low = unique(c+1,c+1+tt)-c;--low; for(int i = 1;i<=n;++i){ b[i] = lower_bound(c+1,c+1+low,b[i])-c; mkch(rt,1,n,i,b[i]); a[i] = b[i]; } for(int i = 1,x,y,z;i<=m;++i){ int opt = gi; switch(opt){ case 1: SIZE(qt) = 0; x = gi, y = gi,z = gi; query(rt,1,n,x,y); printf("%d\n",c[query(z)]); break; case 2: x = gi, y = gi; y = lower_bound(c+1,c+1+low,y)-c; mkch(rt,1,n,x,y); a[x] = y; break; } } closeIO(); return EXIT_SUCCESS; }
int main(int argc, char *argv[]) { pid_t child_pid; if(argc != 3) { puts("Using: Chat <get-from> <post-to>"); exit(1); } switch(child_pid = fork()) { case -1: perror("Forking error"); exit(1); case 0: mkch(argv[POST_TO]); post(argv[POST_TO]); default: mkch(argv[GET_FROM]); get(argv[GET_FROM]); } return 0; }