{CodeForces】788E New task && 汕头市队赛SRM06 D 五色战队
2017-07-18 23:34
267 查看
D 五色战队 SRM 06
背景&&描述
游行寺家里人们的发色多种多样,有基佬紫、原谅绿、少女粉、高级黑、相簿白等。 日向彼方:吾令人观其气,气成五彩,此天子气也。 琉璃:我们是不是可以组个五人战队了? 游行寺家的n个人排成一排。第i个人的发色是Ai。 能组成战队的条件是: 那五人假设是第a,b,c,d,e人(#include<cstdio> #include<cstring> #include<algorithm> #define LL long long using namespace std; const int M=2000007,N=200007,mod=1e9+7; int read(){ int ans=0,f=1,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; } int sum ,s ,ans; struct node{int w,pos;}e ; bool cmp(node a,node b){return a.w<b.w;} int n,m,cnt,sz; int L ,R ,root ; void clear(){memset(sum,0,sizeof(sum));} int lowbit(int x){return x&-x;} void add(int x){ while(x<=n){ sum[x]++; x+=lowbit(x); } } int push_sum(int x){ int ans=0; while(x){ans+=sum[x]; x-=lowbit(x);} return ans; } struct note{ int l,r,sz; int A,C,AB,BC,ABC; }tr[M]; void up(int x){ int l=tr[x].l,r=tr[x].r; tr[x].sz=(tr[l].sz+tr[r].sz)%mod; tr[x].A=(tr[l].A+tr[r].A)%mod; tr[x].C=(tr[l].C+tr[r].C)%mod; tr[x].AB=(tr[l].AB+tr[r].AB+(LL)tr[l].A*tr[r].sz)%mod; tr[x].BC=(tr[l].BC+tr[r].BC+(LL)tr[r].C*tr[l].sz)%mod; tr[x].ABC=(tr[l].ABC+tr[r].ABC+(LL)tr[l].A*tr[r].BC+(LL)tr[l].AB*tr[r].C)%mod; } void mdf(int& x,int l,int r,int k,int v){ if(!x) x=++sz; if(l==r){ tr[x].sz=1*v; tr[x].A=L[k]*v; tr[x].C=R[k]*v; tr[x].AB=tr[x].BC=tr[x].ABC=0; tr[x].l=tr[x].r=0; return ; } int mid=(l+r)>>1; if(k<=mid) mdf(tr[x].l,l,mid,k,v); else mdf(tr[x].r,mid+1,r,k,v); up(x); } int main() { n=read(); for(int i=1;i<=n;i++) e[i].w=read(),e[i].pos=i; sort(e+1,e+1+n,cmp); for(int i=1;i<=n;i++){ if(e[i].w!=e[i-1].w) cnt++; s[e[i].pos]=cnt; } clear(); for(int i=1;i<=n;i++){ L[i]=push_sum(s[i]); add(s[i]); } clear(); for(int i=n;i>=1;i--){ R[i]=push_sum(s[i]); add(s[i]); } for(int i=1;i<=n;i++){ ans=(ans-tr[root[s[i]]].ABC+mod)%mod; mdf(root[s[i]],1,n,i,1); ans=(ans+tr[root[s[i]]].ABC)%mod; } int x,y; m=read(); for(int i=1;i<=m;i++){ x=read(); y=read(); ans=(ans-tr[root[s[y]]].ABC+mod)%mod; mdf(root[s[y]],1,n,y,x-1); ans=(ans+tr[root[s[y]]].ABC)%mod; printf("%d\n",ans); } return 0; }View Code
相关文章推荐
- 二分专题 codeforces 「343 C」 &「371 C」 题解
- Codeforces - 339B(div2) - Gena's Code
- 51NOD 1491 黄金系统 && Codeforces 458 A. Golden System(斐波那契数列 + 找规律)
- Codeforces 570D Tree Requests 题解&代码
- Codeforces Round #378 (Div. 2) B && codeforces 733B(暴力)
- 【思维 && 构造】CodeForces - 148C Terse princess
- 三元逆序对 求i<j<k && a[i]>a[j]>a[k] 的对数 树状数组Codeforces 61E Enemy is weak
- Codeforces 343D Water Tree 题解&代码
- 【Codeforces 678E】Another Sith Tournament &【JZOJ 4648】锦标赛
- 【Codeforces 839D. Winter is here】& 莫比乌斯反演
- Codeforces Round #210 (Div. 2) C. Levko and Array Recovery && Codeforces 360 A 详解(思维+维护理论值)
- 51NOD 1509 加长棒 && Codeforces 571 A. Lengthening Sticks(组合数学 + 挡板法)
- codeforces 482 B Interesting Array <STL map 的运用>
- codeforces 630 I(规律&&组合)
- 【CodeForces】559C - Gerald and Giant Chess(dp & 逆元 & 容斥原理)
- CodeForces 9C Hexadecimal's Numbers(DFS)
- 51nod 1737 配对 && Codeforces 700B Connecting Universities【树的重心】
- codeforces 171 div2 C&E
- LightOJ 1338 && 1387 - Setu && LightOJ 1433 && CodeForces 246B(水题)
- Codeforces 100187E:Two Labyrinths(搜索&&BFS)