求助!全部TLE!(1.20s)
查看原帖
求助!全部TLE!(1.20s)
1127157
LanQiao1234楼主2024/5/15 14:34
#include <iostream>
#include <vector>
using us=unsigned short;
std::pair<us,us> minmax(const std::vector<us>& vec){
    std::pair<std::vector<us>,std::vector<us>> Ct_c;
    for (auto&& x : vec) {
        std::pair<unsigned,unsigned> left = {}, right = {Ct_c.first.size(), Ct_c.second.size()};
        enum:unsigned char{none_finish,first_finish,second_finish,all_finish} state = none_finish;
        while (left != right) {
            if(~state&first_finish){
                unsigned mid = left.first+ (right.first-left.first) / 2;
                if (Ct_c.first[mid]<x)
                    right.first=mid;
                else
                    left.first=mid+1;
            }if(~state&second_finish){
                unsigned mid = left.second+ (right.second-left.second) / 2;
                if (Ct_c.second[mid]<x)
                    left.second=mid+1;
                else
                    right.second=mid;
            }
            state=decltype(state)((left.first==right.first)|(left.second==right.second)<<1);
        }
        if (left.first==Ct_c.first.size())
            Ct_c.first.push_back(x);
        else
            Ct_c.first[left.first]=x;
        if (left.second==Ct_c.second.size())
            Ct_c.second.push_back(x);
        else
            Ct_c.second[left.second]=x;
    }
    return {Ct_c.first.size(), Ct_c.second.size()};
}
int main(){
    std::vector<us> highs(100000);
    for(us i=0;i<highs.size();i++){
        std::cin>>highs[i];
        if(std::cin.get()=='\n'){
            highs.erase(highs.begin()+i+1,highs.end());
            break;
        }
    }
    auto pair=minmax(highs);
    std::cout<<pair.first<<std::endl<<pair.second<<std::endl;
}

不知道哪里出现了问题,在我普通随机测试时没出现任何问题,多出来的时间花在了哪?

2024/5/15 14:34
加载中...