首页 > 技术文章 > 树状数组二分

29taorz 2022-01-03 11:51 原文

#include<bits/stdc++.h>//树状数组二分 
using namespace std;
int q,b,s,t[1000],k,sum1[1000],sum2[1000],n=10;
void add(int p,int k)
{
    for(int i=p;i<=n;i+=i&-i)
        t[i]+=k;
}
int find(int k)
{
    int l=1,r=n,mid;
    for(int i=5;i>=0;i--)
    {
        mid=l+(1<<i)-1;
        if(mid>r)
            continue;
        if(t[mid]>k)
            r=mid;
        else
            l=mid+1,k-=t[mid];
    }
    return l;
}
int main()
{
    cin>>q;
    while(q--)
    {
        cin>>b;
        if(b==1)
        {
            cin>>s>>k;
            add(s,k);
        }
        else
        {
            cin>>k;
            cout<<find(k);
        }
    } 
    return 0;
} 

 

推荐阅读