标签:turn ret 数据 问题 pre can bit har getch
#include<bits/stdc++.h> using namespace std; const int MAX=5e5+5; int n,m,c[MAX]; int lowbit(int x) { return x&-x; } void update(int a,int b) { while(a<=n) { c[a]+=b; a+=lowbit(a); } } int sum(int x) { int ans=0; while(x>0) { ans+=c[x]; x-=lowbit(x); } return ans; } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { int x; cin>>x; update(i,x); } for(int i=1;i<=m;i++) { int k,a,b; scanf("%d%d%d",&k,&a,&b); if(k==2) printf("%d\n",sum(b)-sum(a-1)); else update(a,b); } return 0; }
#include<bits/stdc++.h> using namespace std; const int MAX=1e6,LOG=25; int n,m; int f[MAX][LOG],logg[MAX]; inline int read() { int ans=0,f=1; char c; c=getchar(); while(c<‘0‘ || c>‘9‘) { if(c==‘-‘) f=-1; c=getchar(); } while(c>=‘0‘ && c<=‘9‘) { ans=ans*10+c-‘0‘; c=getchar(); } return ans*f; } void init() { n=read(),m=read(); for(int i=1;i<=n;i++) f[i][0]=read(); logg[0]=-1; for(int i=1;i<=n;i++) logg[i]=logg[i>>1]+1; } void st() { for(int j=1;j<=LOG;j++) for(int i=1;i+(1<<j)-1<=n;i++) f[i][j]=max(f[i][j-1],f[i+(1<<j-1)][j-1]); } int main() { init(); st(); for(int i=1;i<=m;i++) { int x,y; x=read(),y=read(); int s=logg[y-x+1]; printf("%d\n",max(f[x][s],f[y-(1<<s)+1][s])); } return 0; }
标签:turn ret 数据 问题 pre can bit har getch
原文地址:https://www.cnblogs.com/zhouzhihao/p/11355322.html