闲话
今天还是体育的一天
明天就要送别可爱同桌了
呜呜呜呜呜呜呜呜呜呜呜呜
她去济南了呜呜呜呜呜呜呜呜呜呜呜呜
冰糖老婆的精神状态好像不太正常
哭唧唧
调代码需要的信息提取能力也太高了()
听中 V 调代码效率↓/cf
题
调了昨天的题,复习了平衡树,然后调了一年。
第二天的升旗仪式上想出来的...
// Problem: P6136【模板】普通平衡树(数据加强版)
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P6136
// Memory Limit: 89 MB
// Time Limit: 3000 ms
#include<bits/stdc++.h>
using namespace std;
template<class T>void read(T &x){
x=0;int f=0;char ch=getchar();
while(ch<'0'||ch>'9') {f|=(ch=='-');ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
x=f?-x:x;return;
}
const int N=1e5+5,M=1e6+5;
int n,m;
namespace FHQ_Treap{
int cnt,root;
struct node{int l,r,val,siz,key;}a[N+M];
int new_node(int val){
a[++cnt]=(node){0,0,val,1,rand()};return cnt;
}
void pushup(int x){
a[x].siz=a[a[x].r].siz+a[a[x].l].siz+1;
}
void split(int k,int x,int &l,int &r){
if(!k) {l=r=0;return ;}
if(a[k].val<=x){l=k;split(a[k].r,x,a[k].r,r);}
else {r=k;split(a[k].l,x,l,a[k].l);}
pushup(k);
}
int merge(int l,int r){
if(!l||!r){
return (l+r);
}
if(a[l].key<=a[r].key){
a[l].r=merge(a[l].r,r);
pushup(l);return l;
}
else {
a[r].l=merge(l,a[r].l);
pushup(r);return r;
}
}
int kth(int x,int k){
if(a[a[x].l].siz+1==k) return x;
if(a[a[x].l].siz>=k) return kth(a[x].l,k);
return kth(a[x].r,k-a[a[x].l].siz-1);
}
}
using namespace FHQ_Treap;
int main(){
mt19937 srand(114514111);
read(n),read(m);
for(int i=1;i<=n;i++){
int t,r1,r2;
read(t);
split(root,t,r1,r2);
int tmp=new_node(t);
root=merge(merge(r1,tmp),r2);
}
int lastans=0,sumans=0;
while(m--){
int op,x;
read(op),read(x);x^=lastans;
if(op==1){
int r1,r2;
split(root,x,r1,r2);
int tmp=new_node(x);
root=merge(merge(r1,tmp),r2);
}
if(op==2){
int r1,r2,r3;
split(root,x,r1,r2);
split(r1,x-1,r1,r3);
root=merge(merge(r1,merge(a[r3].l,a[r3].r)),r2);
}
if(op==3){
int r1,r2;
split(root,x-1,r1,r2);
lastans=a[r1].siz+1;
sumans^=lastans;
root=merge(r1,r2);
}
if(op==4){
lastans=a[kth(root,x)].val;
sumans^=lastans;
}
if(op==5){
int r1,r2;
split(root,x-1,r1,r2);
lastans=a[kth(r1,a[r1].siz)].val;
root=merge(r1,r2);
sumans^=lastans;
}
if(op==6){
int r1,r2;
split(root,x,r1,r2);
lastans=a[kth(r2,1)].val;
root=merge(r1,r2);
sumans^=lastans;
}
}
cout<<sumans<<endl;
return 0;
}
标签:20230424,ch,return,int,呜呜,read,getchar,小记
From: https://www.cnblogs.com/Artemis-lx/p/17352582.html