[TIOJ] 1410 Comiket

題目連結:http://tioj.ck.tp.edu.tw/problems/1410
  很可惜這題式靜態的,又或者不是區間查詢的,如果是的話,就可以寫個刺激的BIT了或者練習其他資料結構了XD
  反正就先離散化,然後掃過去,進入的時刻就加一、出去的話就減一,最後求前綴和就是那個時候的人數,有點無聊QQ

#include<bits/stdc++.h>
using namespace std;
int t;
class discretization{
    private:
        vector<int> lisan,status;
    public:
        inline vector<int> com(vector<int> a)
        {
            status.resize(a.size());
            lisan = a;
            sort(lisan.begin(),lisan.end());
            lisan.resize(unique(lisan.begin(),lisan.end())-lisan.begin());
            for(int i = 0; i < (int)a.size(); i++) 
                status[i] = lower_bound(lisan.begin(),lisan.end(),a[i])-lisan.begin();
            return status;
        }
        inline vector<int> model(vector<int> a)
        {
            lisan = a;
            sort(lisan.begin(),lisan.end());
            lisan.resize(unique(lisan.begin(),lisan.end())-lisan.begin());
            return lisan;
        }
}lis;
vector<pair<int,int> > loli;
vector<int> he;
int com[2000009];
int main()
{
    cin >> t;
    while(t--)
    {
        int a,b; cin >> a >> b;
        loli.push_back({a,b});
        he.push_back(a); he.push_back(b);
    }
    he = lis.model(he);
    for(int i = 0; i < loli.size(); i++)
    {
        com[lower_bound(he.begin(),he.end(),loli[i].first)-he.begin()]++;
        com[lower_bound(he.begin(),he.end(),loli[i].second)-he.begin()+1]--;
    }
    int ans = com[0];
    for(int i = 1; i <= 2*loli.size(); i++) com[i] += com[i-1], ans= max(ans,com[i]);
    cout << ans << endl;
}

留言

這個網誌中的熱門文章

Shellshock.io從入門到上手(針對單狙)(沒有圖片、影片版本)

[TIOJ] 1007燈泡問題