1.1闲话

发布时间 2024-01-01 20:48:45作者: Vsinger_洛天依

推个歌但是不推原版原版歌词有点抽象

精卫,但是鬼面p改了几处词版

(每个身体情不自禁)

是现在我所有期待

所有的爱

为什么不明白

说的话为什么不记得

为什么不记得

(愿生命绽放再盛开)

你与我

先谈养心殿

后拜瀑淋身

闲暇闻几页

翻开几本书

也罢

至填没在大海

(似我的哀)

可它为什么不记得

为什么不记得

它到底用什么灌溉

用什么来爱

用什么方式

用什么去对待

春华是秋实模特

掩饰过的

延伸向海

她们总是过客

我猜我猜想

周围有茶蘼生长

无法放弃

无法凋零

可是啊这世界

有太多的不解

反正我没劝退

梦里都是虚伪

我只是太想要份爱

想要份爱

我只是太想被好好对待

但是呢我心中的意义

难道我身上贴着过去过去

可是呢

我心中的海

填满不回来

回来

(流文弄我琉璃百盏死得一归相信一回)劝你相信一回

梦与现实的交汇点,谁错谁对?

回学校了困困困zzzzzzzz

回去光顾着听歌了,忘打游戏了输输输,但是看了b站最美的夜看到了天依赢赢赢

\(splay\)的题

\(splay\)模拟了个\(priority\_queue\)

$code$
const int N=1000005;
const int INF=0x66CCFF0712;
class Spaly{
private:
    int f[N],ch[N][2],sz,root;
public:
    int key[N],lazytag=0,totf=0,cnt[N],siz[N];
    inline void clear(int x){
        ch[x][0]=ch[x][1]=f[x]=cnt[x]=key[x]=siz[x]=0; 
    }
    inline int get(int x){
        return ch[f[x]][1]==x;
    }
    inline void update(int x){
        if(x){
            siz[x]=cnt[x];
            if(ch[x][0]){
                siz[x]+=siz[ch[x][0]];
            }
            if(ch[x][1]){
                siz[x]+=siz[ch[x][1]];
            }
        }
        
    }
    inline void rotate(int x){
        int old=f[x],oldf=f[old],which=get(x);
        ch[old][which]=ch[x][which^1];
        f[ch[old][which]]=old;
        ch[x][which^1]=old;
        f[old]=x;f[x]=oldf;
        if(oldf)
            ch[oldf][ch[oldf][1]==old]=x;
        update(old);
        update(x);
        return;
    }
    inline void splay(int x){
        for(int fa;fa=f[x];rotate(x))
            if(f[fa])
                rotate(get(x)==get(fa)? fa : x);
            root=x;
    }
    inline void insert(int v){
        if(root==0){
            ++sz;
            root=sz;
            ch[root][0]=ch[root][1]=f[root]=0;
            key[root]=v;
            cnt[root]=siz[root]=1;
            return;
        }
        int cur=root,fa=0;
        while(1){
            if(key[cur]==v){
                ++cnt[cur];
                update(cur);
                update(fa);
                splay(cur);
                break;
            }
            fa=cur;
            cur=ch[cur][key[cur]<v];
            if(cur==0){
                ++sz;
                ch[sz][0]=ch[sz][1]=0;
                key[sz]=v;
                siz[sz]=1;
                cnt[sz]=1;
                f[sz]=fa;
                ch[fa][key[fa]<v]=sz;
                update(fa);
                splay(sz);
                break;
            }
        }
    }
    inline int find(int v){
        int ans=0,cur=root;
        while(1){
            if(v<key[cur])
                cur=ch[cur][0];
            else {
                ans+=(ch[cur][0] ? siz[ch[cur][0]] : 0);
                if(v==key[cur]){
                    splay(cur);
                    return ans+1;
                }
                ans+=cnt[cur];
                cur=ch[cur][1];
            }
        }
    }
    inline int findth(int k){
        int cur=root;
        while(1){
            if(ch[cur][0] && k<=siz[ch[cur][0]])
                cur=ch[cur][0];
            else {
                int tem=(ch[cur][0] ? siz[ch[cur][0]] : 0) +cnt[cur];
                if(k<=tem)
                    return key[cur];
                k-=tem;
                cur=ch[cur][1];
            }
        }
    }
    inline int pre(){
        int cur=ch[root][0];
        while(ch[cur][1])
            cur=ch[cur][1];
        return cur;
    }
    inline int nxt(){
        int cur=ch[root][1];
        while(ch[cur][0])
            cur=ch[cur][0];
        return cur;
    }
    inline void del(int v){
        find(v);
        if(cnt[root]>1){
            --cnt[root];
            update(root);
            return;
        }
        if(!ch[root][0] && !ch[root][1]){
            clear(root);
            root=0;
            sz=0;
            return;
        }
        if(!ch[root][0]){
            int oldroot=root;
            root=ch[root][1];
            f[root]=0;
            clear(oldroot);
            --sz;
            return;
        }
        else if(!ch[root][1]){
            int oldroot=root;
            root=ch[root][0];
            f[root]=0;
            clear(oldroot);
            --sz;
            return;
        }
        int lpre=pre(),oldroot=root;
        splay(lpre);
        f[ch[oldroot][1]]=root;
        ch[root][1]=ch[oldroot][1];
        update(root);
        return;
    }
}TrEE;
#define TrEE_push(a) TrEE.insert(a)
#define TrEE_top() TrEE.findth(2)
#define TrEE_pop() TrEE.del(TrEE.findth(2))
#define TrEE_empty() ((TrEE.findth(2)==INF)?1:0)
#define TrEE_size() (TrEE.find(INF)-2)

郁闷的出纳员

这是一个奇怪的打法但是100pts

$vector$强过
#include<bits/stdc++.h>
#define int long long
namespace IO{
    inline void close(){std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);}
    inline void Fire(){freopen("data.in","r",stdin);freopen("data.out","w",stdout);}
    inline int read(){int s = 0,w = 1;char ch = getchar();while(ch<'0'||ch>'9'){ if(ch == '-') w = -1;ch = getchar();}while(ch>='0'&&ch<='9'){ s = s*10+ch-'0';ch = getchar();}return s*w;}
    inline void write(int x){char F[200];int tmp=x>0?x:-x,cnt=0;;if(x<0)putchar('-') ;while(tmp>0){F[cnt++]=tmp%10+'0';tmp/=10;}while(cnt>0)putchar(F[--cnt]);}
}
#define close IO::close
#define Fire IO::Fire
#define read IO::read
#define write IO::write
#define cin std::cin
#define cout std::cout
#define endl '\n'
const int N=1000005;
const int INF=0X66CCFF0712;
using namespace std;
int n=read(),min_a=read();
vector<int>G;
int ans=0;
signed main(){
	for(int i=1;i<=n;i++){
		char c;cin>>c;
		int k=read();
		if(c=='I'){
			if(k<min_a) 
                continue;
			G.insert(lower_bound(G.begin(),G.end(),k),k);
		}
		else if(c=='A'){
			for(int i=0;i!=G.size();i++)
				G[i]+=k;
		}
		else if(c=='S'){
			int t=G.size();
			for(int i=0;i!=G.size();i++) {
				G[i]-=k;
				if(G[i]<min_a) {
					ans++;
					G.erase(G.begin()+i);
					i--;
				}
			}
		}
		else if(c=='F'){
			if(k>G.size()) cout<<"-1\n";
			else printf("%lld\n",G[G.size()-k]);
		}
	}
	cout<<ans;
}

但是我正解调了好久QAQ

目前思路上就是因为是统一加减,所以直接维护一个\(lazytag\)表示整体的修改,然后实现就挺简单的直接套splay板子但是因为没有在修改后直接删除而是最后统一删(离线是吧)导致WA了9个点

就一板子代码不放了