为什么只有10分啊,绝望了!!!求助!!!

P2801 教主的魔法

Belarus @ 2019-09-08 20:47:40

严谨二分法查找
竟然只有1AC,还有WA和TLE
就算是从l到r搜一遍时间复杂度也是O(n)啊
而n<=1e6啊

//p2801
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+9;
typedef long long ll;
int n,q;
ll a[maxn],b[maxn];
inline ll search(ll lft,ll rt,ll exp){
    ll tot=0;
    while(lft<rt){
        ll mid=(lft+rt)>>1;
        if(b[mid]>=exp) rt=mid;
        else{
            lft=mid+1;
            tot=n-lft+1;
            break;
        }
    }
    return tot;
}
int main(){
    ios::sync_with_stdio(0);
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        b[i]=a[i];
    }
    while(q--){
        ll l=0,r=0,c=0,w=0;
        char ch;
        cin>>ch;
        if(ch=='A'){
            cin>>l>>r>>c;
            memcpy(b,a,sizeof(b));
            sort(b+1,b+n+1);
            cout<<search(l,r,c)<<endl;
        }
        else if(ch=='M'){
            cin>>l>>r>>w;
            for(int i=l;i<=r;i++) a[i]+=w;
        }
    }
    return 0;
}

by WA_er @ 2019-09-08 20:55:53

前排围观(吃瓜


by 只以 @ 2019-09-08 20:57:46

%%%怒切省选题的dalao


by Polaris_Dane @ 2019-09-08 20:58:19

@Charleyxiao

我就很好奇你到底在干吗

这道题分块的模板题啊

二分搞鬼啊


by le_星辰 @ 2019-09-08 21:02:49

然而你每次都要排序,时间复杂度就高了,应该是T(n)=O(qnlog2*n)


by Polaris_Dane @ 2019-09-08 21:03:31

@Charleyxiao

而且你写的就是错的

应该只排序了l到r

个人觉得改了也会TLE一大堆


by le_星辰 @ 2019-09-08 21:03:44

@Charleyxiao 你不好好订正(哭笑)


by Polaris_Dane @ 2019-09-08 21:04:21

@le_星辰

???这是一个学校的


by Polaris_Dane @ 2019-09-08 21:07:26

@Charleyxiao

二分只能块内二分


by le_星辰 @ 2019-09-08 21:07:43

@Polaris_Dane 是


by Polaris_Dane @ 2019-09-08 21:08:39

@le_星辰

我也卡在分块题目上了


| 下一页