mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-09-11 10:30:00 +00:00
feat: 添加P7992和libre10115两个算法问题的解决方案
添加了两个新的算法实现文件: 1. P7992.cpp - 实现了一个基于前缀和的统计问题解决方案 2. libre10115.cpp - 实现了一个使用二叉索引树(Fenwick Tree)的区间查询问题解决方案
This commit is contained in:
parent
cc3380434c
commit
b6e0880148
33
src/9/4/P7992.cpp
Normal file
33
src/9/4/P7992.cpp
Normal file
@ -0,0 +1,33 @@
|
||||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <istream>
|
||||
#include <vector>
|
||||
using ll = int64_t;
|
||||
|
||||
|
||||
int main(){
|
||||
std::iostream::sync_with_stdio(false);
|
||||
std::cin.tie(nullptr);
|
||||
|
||||
ll n,m;
|
||||
std::cin>>n>>m;
|
||||
std::vector<ll> va(m+1),vb(m+1);
|
||||
for(ll i=1;i<=n;i++){
|
||||
ll a,b;
|
||||
std::cin>>a>>b;
|
||||
va[a]++;
|
||||
vb[b]++;
|
||||
}
|
||||
std::vector<ll> pre(2*m+2);
|
||||
for(ll i=0;i<=m;i++){
|
||||
for(ll j=0;j<=m;j++){
|
||||
pre[i+j]+=va[i]*va[j];
|
||||
pre[i+j+1]-=vb[i]*vb[j];
|
||||
}
|
||||
}
|
||||
ll ans=0;
|
||||
for(ll i=0;i<=2*m;i++){
|
||||
ans+=pre[i];
|
||||
std::cout<<ans<<'\n';
|
||||
}
|
||||
}
|
52
src/9/4/libre10115.cpp
Normal file
52
src/9/4/libre10115.cpp
Normal file
@ -0,0 +1,52 @@
|
||||
#include <cstdint>
|
||||
#include <ios>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
using ll = int64_t;
|
||||
|
||||
struct BT{
|
||||
const ll size;
|
||||
std::vector<ll> t;
|
||||
static inline ll lb(ll n){
|
||||
return n&(-n);
|
||||
}
|
||||
BT(ll size):size(++size),t(size+1){
|
||||
|
||||
}
|
||||
inline void upd(ll idx,ll add){
|
||||
while(idx<=size){
|
||||
t[idx]+=add;
|
||||
idx+=lb(idx);
|
||||
}
|
||||
}
|
||||
inline ll get(ll idx){
|
||||
ll res=0;
|
||||
while(idx){
|
||||
res+=t[idx];
|
||||
idx-=lb(idx);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
};
|
||||
|
||||
int main(){
|
||||
std::ios_base::sync_with_stdio(false);
|
||||
std::cin.tie(nullptr);
|
||||
|
||||
ll n,m;
|
||||
std::cin>>n>>m;
|
||||
BT s(n),e(n);
|
||||
for(ll i=1;i<=m;i++){
|
||||
ll k,l,r;
|
||||
std::cin>>k>>l>>r;
|
||||
if(k==1){
|
||||
s.upd(l, 1);
|
||||
e.upd(r, 1);
|
||||
}else{
|
||||
ll nans=
|
||||
s.get(r) - e.get(l-1);
|
||||
|
||||
std::cout<<nans<<"\n";
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user