社区讨论
TLE最后一个点,树状数组为什么会被卡啊
P4113[HEOI2012] 采花参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lqxdb57n
- 此快照首次捕获于
- 2024/01/03 13:58 2 年前
- 此快照最后确认于
- 2024/01/03 16:49 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=2000005;
vector<int> task[N],tasid[N];
vector<int> nums[N];
int len[N];
int n,c,m;
int a[N],tj[N];
int tre[N];
inline void upd(int p,int v){
while(p<=n){
tre[p]+=v;
p+=(p&(-p));
}
}
inline int que(int p){
int ans=0;
while(p){
ans+=tre[p];
p-=(p&(-p));
}
return ans;
}
int output[N];
int all;
int main(){
ios::sync_with_stdio(0);cin.tie(0);
cin>>n>>c>>m;
for(int i=1;i<=n;i++)cin>>a[i],nums[a[i]].push_back(i);
for(int i=1;i<=m;i++){
int l,r;
cin>>l >>r;
task[r].push_back(l);
tasid[r].push_back(i);
}
for(int i=1;i<=n;i++){
len[a[i]]++;
if(len[a[i]]==2)upd(nums[a[i]][0],1),all++;
if(len[a[i]]>2)upd(nums[a[i]][len[a[i]]-3],-1),upd(nums[a[i]][len[a[i]]-2],1);
for(int j=0;j<task[i].size();j++)output[tasid[i][j]]=all-que(task[i][j]-1);
}
for(int i=1;i<=m;i++)cout<<output[i]<<"\n";
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...