| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:WA用树状数组 qwq 有大佬帮忙看一下吗In Reply To:WA用树状数组 qwq 有大佬帮忙看一下吗 Posted by:qqcoder at 2019-12-17 17:58:37 > #include<cstdio>
> #include<iostream>
>
> using namespace std;
> const int maxn=1e5+1;
> typedef long long ll;
>
> ll N,Q;
> ll sum1[maxn],sum2[maxn];
> ll a[maxn];
> char c;
>
> ll lowbit(ll x){return x&-x;}
>
> void add(ll *arr,ll x,ll c)
> {
> while(x<=N)
> {
> arr[x]+=c;
> x+=lowbit(x);
> }
> }
> ll query(ll *arr,ll x)
> {
> ll ans=0;
> while(x)
> {
> ans+=arr[x];
> x-=lowbit(x);
> }
> return ans;
> }
>
> int main()
> {
> cin>>N>>Q;
> ll x;
> for(int i=1;i<=N;i++)
> {
> scanf("%d",&a[i]);
> //a[i]+=a[i-1];
> add(sum1,i,a[i]-a[i-1]);
> add(sum2,i,i*(a[i]-a[i-1]));
> }
> for(int i=1;i<=Q;i++)
> {
> cin>>c;
> if(c=='Q')
> {
> ll cur=0;
> ll x,y;
> cin>>y>>x;
> //cur=a[y]-a[x-1];
> //cur+=query(b,)
> cur+=(x+1)*query(sum1,x)+query(sum2,y-1);
> cur-=y*query(sum1,y-1)+query(sum2,x);
> cout<<cur<<endl;
> }
> else{
> ll a,b,c;
> cin>>a>>b>>c;
> add(sum1,a,c),add(sum1,b+1,-c);
> add(sum2,a,a*c),add(sum2,b+1,-(b+1)*c);
> }
> }
> return 0;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator