mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-09-06 02:00:36 +00:00
refactor(9): 重构P3608.cpp并添加P6278.cpp
将P3608.cpp移动到9/1目录并扩展功能 新增P6278.cpp实现树状数组相关算法 修改test.cpp添加输入处理和异常检查
This commit is contained in:
parent
6acad9f13b
commit
9db115d255
@ -12,6 +12,8 @@ std::vector<ll> a,raw;
|
|||||||
std::map<ll, ll> m;
|
std::map<ll, ll> m;
|
||||||
std::vector<ll> t;
|
std::vector<ll> t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static inline constexpr ll lb(ll n){
|
static inline constexpr ll lb(ll n){
|
||||||
return n&(-n);
|
return n&(-n);
|
||||||
}
|
}
|
52
src/9/1/P6278.cpp
Normal file
52
src/9/1/P6278.cpp
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#include <cstdint>
|
||||||
|
#include <iostream>
|
||||||
|
#include <istream>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
using ll = int64_t;
|
||||||
|
|
||||||
|
ll n,ans=0;
|
||||||
|
std::vector<ll> a,t,s;
|
||||||
|
|
||||||
|
static inline ll lb(ll val){
|
||||||
|
return n&-n;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void upd(ll idx,ll add){
|
||||||
|
while (idx<=n) {
|
||||||
|
t[idx]+=n;
|
||||||
|
idx+=lb(idx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline ll get(ll idx){
|
||||||
|
ll res=0;
|
||||||
|
while(idx){
|
||||||
|
res+=t[idx];
|
||||||
|
idx-=lb(idx);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
std::iostream::sync_with_stdio(false);
|
||||||
|
std::cin.tie(nullptr);
|
||||||
|
|
||||||
|
std::cin>>n;
|
||||||
|
a.resize(n+2);
|
||||||
|
s.resize(n+2);
|
||||||
|
t.resize(n+2);
|
||||||
|
for(ll i=1;i<=n;++i){
|
||||||
|
std::cin>>a[i];
|
||||||
|
++a[i];
|
||||||
|
}
|
||||||
|
for(ll i=1;i<=n;++i){
|
||||||
|
s[i]=get(a[i]);
|
||||||
|
upd(a[i],1);
|
||||||
|
}
|
||||||
|
std::cout<<"0\n";
|
||||||
|
for(ll i=1;i<=n;i++){
|
||||||
|
ans+=s[i];
|
||||||
|
std::cout<<ans<<"\n";
|
||||||
|
}
|
||||||
|
}
|
21
src/test.cpp
21
src/test.cpp
@ -1,8 +1,19 @@
|
|||||||
|
#include <cmath>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
using namespace std;
|
#include <set>
|
||||||
|
#include <stdexcept>
|
||||||
|
#include <string>
|
||||||
int main(){
|
int main(){
|
||||||
int a = 1;
|
int n;
|
||||||
a<<=32;
|
std::cin>>n;
|
||||||
cout<<a<<"\n";
|
std::set<int> s;
|
||||||
|
std::cout<<n<<"\n";
|
||||||
|
for(int i=1;i<=n;i++){
|
||||||
|
int tmp;
|
||||||
|
std::cin>>tmp;
|
||||||
|
if(s.find(tmp)==s.end()){
|
||||||
|
throw std::runtime_error(std::to_string(tmp));
|
||||||
|
}
|
||||||
|
s.insert(tmp);
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user