【CodeChef】LCH15JGH Many bananas

来源:互联网 发布:华为手机彻底删除数据 编辑:程序博客网 时间:2024/05/02 00:45

暴力可以水过。

#include<bits/stdc++.h>using namespace std;char inc;inline void get(int& x){x = 0;inc = getchar();while(!isdigit(inc))inc=getchar();while(isdigit(inc)){x=x*10+inc-'0';inc=getchar();}}#define maxn 100010int n,m,a[maxn],vmax;char op[2];int main(){get(n);int x,y;for(int i=1;i<=n;i++){get(x);get(y);a[x] = y;vmax = max(vmax,x);}get(m);for(int i=1;i<=m;i++){scanf("%s",op);get(x);if(*op=='?'){long long tot = 0;for(int j=2;j<=vmax;j++){tot+=(x%j)*(long long)a[j];}printf("%lld\n",tot);}else if(*op=='+'){a[x]++;vmax=max(vmax,x);}else{a[x]--;for(int j=vmax;j>=1;j--)if(a[j]){vmax = j;break;}}}return 0;}
BIT
#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#include<cmath>#include<algorithm>#include<vector>#include<set>#include<map>#define ll long long #define inf 1000000000using namespace std;ll read(){    ll x=0,f=1;char ch=getchar();    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}    return x*f;}int n,m;ll tot;ll t[100005],c[305];void add(int x,ll val){for(int i=x;i<=100000;i+=i&-i)t[i]+=val;}ll query(int x){ll ans=0;for(int i=x;i;i-=i&-i)ans+=t[i];return ans;}void solve_add(int x,ll val){if(x<=300)c[x]+=val;else {tot+=val;for(int i=x;i<=100000;i+=x)add(i,val*(-x));}}ll solve_query(ll x){ll ans=0;for(int i=1;i<=300;i++)ans+=x%i*c[i];ans=ans+tot*x+query(x);return ans;}int main(){n=read();int x,y;char ch[2];for(int i=1;i<=n;i++){x=read();y=read();solve_add(x,y);}m=read();while(m--){scanf("%s",ch+1);x=read();if(ch[1]=='?')printf("%lld\n",solve_query(x));else if(ch[1]=='+')solve_add(x,1);else solve_add(x,-1);}return 0;}


0 0
原创粉丝点击