1014,1019,1081
1019 树状数组 求 逆序数
1081 树状数组 求 区间和
①离散化。
struct num{
int ord;
int value;
}
sort(a+1,a+n+1,cmp);
aa[a[i].ord]=i;
我的理解就是:不改变数组的顺序,但是把每个元素的值改为从1~n+1的数字。
树状数组
int lowbit(int x)
return x&(-x);
void add(int x,int d)(修改)
{
while(x<=n)
{
c[x]+=d;
x+=lowbit(x);
}
}
int getsum(int x)
{
int sum=0;
while(x>0)
{
sum+=c[x];
x-=lowbit(x);
}
return sum;
}
1014 快速幂
long long quickpow(long long a,long long b,long long c)
{
long long result;
if(b==0) return 1;
else
{
while((b&1)==0)
{
b>>=1;
a=((a%c)*(a%c))%c;
}
}
result=a;
b>>=1;
while(b)
{
a=((a%c)*(a%c))%c;
if(b&1)
{
result=(result*(a%c))%c;
}
b>>=1;
}
return result;
}
1049 我觉得这道题有一点dp的思想
sum1:当前和 sum2:当前最大和
if (a[i]+sum1>a[i]) sum1=a[i]+sum
else sum1=a[i]
if(sum1>sum2)
sum2=sum1;