算法进阶指南:基本数据结构0x13 链表与邻接表

    • 邻值查找

AcWing-136. 邻值查找

牛客竞赛-邻值查找

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list> 
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second 
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define all(x) (x).begin(),(x).end()
#define db double
#define eps 1e-9
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=9901;
const int N=100010;
void solve()
{
    int n,x;
    set<int>s;
    map<int,int>mp;
    cin>>n;
    rep(i,0,n){
        cin>>x;
        if(i){
            auto p=s.lower_bound(x);
            if(p==s.end()){
                --p;
                cout<<x-*p<<" "<<mp[*p]<<endl;
            }else{
                int ans=*p;
                if(p!=s.begin()){
                    --p;
                    if(x-*p<=ans-x) ans=*p;
                }
                cout<<abs(ans-x)<<" "<<mp[ans]<<endl;
            }
        }
        s.insert(x),mp[x]=i+1;
    }
}
int main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int _=1;
    //cin>>_;
    while(_--){
        solve();
    }
    return 0;
}
    • Running Median

牛客竞赛-Running Median

AcWing-106. 动态中位数

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list> 
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second 
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define db double
#define eps 1e-9
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=9901;
const int N=25;

void solve()
{
    int ca,n;
    cin>>ca>>n;
    cout<<ca<<" "<<n/2+n%2<<endl;
    multiset<int>st;
    int x,y;
    cin>>x;
    st.insert(x);
    multiset<int>::iterator it=st.begin();
    cout<<*it<<" ";
    for(int i=2;i+1<=n;i+=2){
        cin>>x>>y;
        st.insert(x),st.insert(y);
        if(x>=*it&&y>=*it) ++it;
        if(x<*it&&y<*it) --it;
        cout<<*it<<" ";
        if((i/2+1)%10==0) cout<<endl;
    }
    if((n/2+n%2)%10) cout<<endl;
}
int main()
{
    #ifndef ONLINE_JUDGE
        freopen("title.in","r",stdin);
        freopen("title.out","w",stdout);
    #endif
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int _=1;
    cin>>_; 
    while(_--){
        solve();
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值