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_星辰
我也卡在分块题目上了