mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-09-11 18:40: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