1 #include<iostream>
2 #include<algorithm>
3 #define M 500001
4 using namespace std;
5 int c[M],aa[M],n; //aa鏁扮粍涓烘帓搴忓悗閲嶆柊緙栧彿鐢?/span>
6 struct digit
7 {
8 int num,id;
9 }a[M]; //num涓烘暟鐨勫ぇ灝?/span>
10 bool cmp(digit a,digit b){
11 return a.num<b.num;
12 }
13 int lowbit(int t){
14 return t&(t^(t-1));
15 }
16 int sum(int t){
17 int total=0;
18 while(t>0){
19 total+=c[t];
20 t-=lowbit(t);
21 }
22 return total;
23 }
24 void update(int t,int key){
25 while(t<=n){
26 c[t]+=key;
27 t+=lowbit(t);
28 }
29 }
30 int main()
31 {
32 int i,j;
33 long long ans;
34 while(scanf("%d",&n),n){
35 memset(c,0,sizeof(c));
36 ans=0;
37 for(i=1;i<=n;i++){
38 scanf("%d",&a[i].num);
39 a[i].id=i;
40 }
41 sort(a+1,a+n+1,cmp);
42 aa[a[1].id]=1; //鏈灝忕殑鏁扮紪鍙蜂負(fù)1
43 for(i=2;i<=n;++i){
44 if(a[a[i].id].num!=a[a[i-1].id].num) //濡傛灉鍓嶅悗涓や釜鏁頒笉絳夛紝鍒欑紪鍙蜂負(fù)涓嬫爣
45 aa[a[i].id]=i;
46 else
47 aa[a[i].id]=aa[a[i-1].id]; //鍚﹀垯緙栧彿涓庡墠涓涓浉鍚?/span>
48 }
49 //for(i=1;i<=n;i++) printf("%d ",aa[i]);
50 for(i=1;i<=n;++i){
51 update(aa[i],1);
52 ans+=(sum(n)-sum(aa[i])); //姣忔绱姞璇ユ暟鍓嶈竟姣斿畠澶х殑鏁扮殑涓暟
53 }
54 printf("%lld\n",ans);
55 }
56 }
1 #include<iostream>
2 #define M 1300
3 int c[M][M],a[M][M],n;
4 int lowbit(int t){
5 return t&(t^(t-1));
6 }
7 int sum(int p,int q){
8 int x=p,y,total=0;
9 while(x>0){
10 y=q;
11 while(y>0){
12 total+=c[x][y];
13 y-=lowbit(y);
14 }
15 x-=lowbit(x);
16 }
17 return total;
18 }
19 void modify(int p,int q,int key){
20 int x=p,y;
21 while(x<=n){
22 y=q;
23 while(y<=n){
24 c[x][y]+=key;
25 y+=lowbit(y);
26 }
27 x+=lowbit(x);
28 }
29 }
30 int main()
31 {
32 int i,j,k,jj,kk,m,order,ans;
33 scanf("%d%d",&i,&n);
34 memset(c,0,sizeof(c));
35 memset(a,0,sizeof(a));
36 while(scanf("%d",&order)!=EOF){
37 if(order==3) break;
38 else if(order==1){
39 scanf("%d%d%d",&j,&k,&m);
40 ++j; ++k;
41 if(m<0&&m*(-1)>a[j][k]){
42 m=(-1)*a[j][k];
43 modify(j,k,m);
44 a[j][k]=0;
45 }
46 else{
47 modify(j,k,m);
48 a[j][k]+=m;
49 }
50 }
51 else if(order==2){
52 scanf("%d%d%d%d",&j,&jj,&k,&kk);
53 ++j; ++jj; ++k; ++kk;
54 //printf("%d ",sum(n,n));
55 ans=sum(k,kk)+sum(j-1,jj-1)-sum(k,jj-1)-sum(j-1,kk);
56 printf("%d\n",ans);
57 }
58 }
59 }
1 #include<iostream>
2 #include<algorithm>
3 #include<map>
4 #define MAX 100002
5 using namespace std;
6 int c[MAX],ans[MAX],n,imax;
7 struct cow
8 {
9 int l,r,id;
10 }a[MAX];
11 bool cmp(cow a,cow b){
12 if(a.r==b.r) //濡傛灉涓や釜鐗涘尯闂村彸杈圭晫鐩稿悓錛屾寜宸﹁竟鐣岀殑鍗囧簭鎺掑垪
13 return a.l<b.l;
14 return a.r>b.r; //鎸夊彸杈圭晫鐨勯檷搴忔帓鍒?/span>
15 }
16 int lowbit(int t){
17 return t&(t^(t-1));
18 }
19 int sum(int t){
20 int total=0;
21 while(t>0){
22 total+=c[t];
23 t-=lowbit(t);
24 }
25 return total;
26 }
27 void modify(int posi,int key){
28 while(posi<=imax){
29 c[posi]+=key;
30 posi+=lowbit(posi);
31 }
32 }
33 int main()
34 {
35 int i,j,k,n;
36 while(scanf("%d",&n),n){
37 memset(c,0,sizeof(c));
38 imax=0;
39 for(i=1;i<=n;i++){
40 scanf("%d%d",&a[i].l,&a[i].r);
41 a[i].id=i; //姣忎釜鐗涙湁涓猧d闃叉鎺掑簭瀹岄『搴忓彉涔?/span>
42 ++a[i].l; ++a[i].r;
43 if(imax<a[i].l) imax=a[i].l; //鐢╥max琛ㄧず鍙寵竟鐣屾渶澶у鹼紝鍗蟲眰鍜屾椂鐨勮竟鐣?/span>
44 }
45 sort(a+1,a+n+1,cmp);
46 for(i=1;i<=n;++i){
47 if(i==1){
48 ans[a[i].id]=sum(a[i].l); //榪欓噷娉ㄦ剰鏄痑ns[a[i].id]鑰屼笉鏄痑ns[i]
49 modify(a[i].l,1);
50 }
51 else{
52 if(a[i].l==a[i-1].l&&a[i].r==a[i-1].r) //濡傛灉涓や釜鐗涘畬鍏ㄧ浉鍚岋紝鐩存帴璧嬪?/span>
53 ans[a[i].id]=ans[a[i-1].id];
54 else
55 ans[a[i].id]=sum(a[i].l); //鍚﹀垯鎵懼嚭宸﹁竟鐣宭姣旇繖涓墰灝忕殑
56 modify(a[i].l,1);
57 }
58 }
59 for(i=1;i<n;++i)
60 printf("%d ",ans[i]);
61 printf("%d\n",ans[i]);
62 }
63 }
64
1 long long ans=0;
2 for(i=1;i<=K;i++){ //K琛ㄧず杈圭殑涓暟
3 ans+=sum(max)-sum(a[i].east); //east鍗充負(fù)N緙栧彿
4 modify(a[i].east,1); //灝哸[i].east鎻掑叆鍒板綋鍓嶆暟緇?/span>
5 }
6
1 #include<iostream>
2 #include<algorithm>
3 #define MAX 10005 //鏈澶х殑city涓暟
4 using namespace std;
5 int c[MAX],n,N,M,K,omax;
6 struct road
7 {
8 int west,east;
9 }a[MAX*MAX]; //MAX*MAX涓烘渶澶氱殑杈圭殑涓暟
10 bool cmp(road a,road b){
11 if(a.west==b.west)
12 return a.east<b.east;
13 return a.west<b.west;
14 }
15 int lowbit(int t){
16 return t&(t^(t-1));
17 }
18 int sum(int t){
19 int total=0;
20 while(t>0){
21 total+=c[t];
22 t-=lowbit(t);
23 }
24 return total;
25 }
26 void modify(int posi,int key){
27 while(posi<=omax){
28 c[posi]+=key;
29 posi+=lowbit(posi);
30 }
31 }
32 int main()
33 {
34 int i,j,k,m,cas;
35 long long ans;
36 scanf("%d",&cas);
37 for(i=1;i<=cas;++i){
38 omax=0; //鐢╫max琛ㄧず鎵鏈塭ast鐨勬渶澶у鹼紝浠ョ‘瀹氭眰鍜屽尯闂?/span>
39 memset(c,0,sizeof(c));
40 scanf("%d%d%d",&N,&M,&K);
41 for(j=1;j<=K;++j){
42 scanf("%d%d",&a[j].east,&a[j].west);
43 if(a[j].east>omax)
44 omax=a[j].east;
45 }
46 sort(a+1,a+1+K,cmp);
47 ans=0;
48 for(j=1;j<=K;++j){ //key code
49 ans+=(sum(omax)-sum(a[j].east));
50 modify(a[j].east,1);
51 }
52 printf("Test case %d: %lld\n",i,ans);
53 }
54 }
55
鍏堟潵鐪嬩竴涓嬫爲(wèi)鐘舵暟緇勭殑姒傚康錛氭爲(wèi)鐘舵暟緇勬槸涓縐嶉潤鎬佹爲(wèi)鐘舵暟鎹粨鏋勶紝瀹冪殑棣栬浣滅敤鏄淮鎶ゅ墠緙鍜岋紝鍗蟲敼鍙樻暟緇勪腑鏌愪竴鍏冪礌a[i]鐨勫鹼紝鑻ヨ璇㈤棶鍓峃欏圭殑鍜岋紝鏍?wèi)鐘舵暟缁勪究鍙畬缇庤В鍐炽傛椂闂村鏉傚害O(logn)銆?br> 鍏堟潵鐩磋鐪嬩竴涓嬫爲(wèi)鐘舵暟緇勭殑緇撴瀯錛堝浘鐗囨潵鑷?a >http://fqq11679.blog.hexun.com/21722866_d.html#錛?br>
1 int lowbit(int n)
2 {
3 return n&(n^(n-1));
4 }
1 int sum(int n)
2 {
3 int total=0;
4 while(n>0){
5 total+=c[n];
6 n-=lowbit(n);
7 }
8 return total;
9 }
1 /*TOJ 3505 Naughty mike*/
2 #include<stdio.h> //娉ㄦ剰鍦ㄤ嬌鐢ㄦ爲(wèi)鐘舵暟緇勬椂涓嬫爣涓瀹氫笉鑳戒粠0寮濮?/span>
3 #include<string.h>
4 #define M 100002
5 int a[M],n;
6 int c[M];
7 int lowbit(int t) //鍏抽敭鐨勪綅鎿嶄綔紜畾鏁扮粍涓嬫爣
8 {
9 return t&(t^(t-1));
10 }
11 int sum(int end) //姹傚墠end欏瑰拰鐨勫嚱鏁幫紝閫氳繃涓嶆柇绱姞鏈澶у瓙鏍?wèi)寰楀?/span>
12 {
13 int i;
14 int total=0;
15 while(end>0){
16 total+=c[end];
17 end-=lowbit(end);
18 }
19 return total;
20 }
21 void modify(int t,int key) //瀵規(guī)暟緇勬煇涓欏硅繘琛屼慨鏀規(guī)椂錛屽彧闇娌胯欏逛竴鐩村悜涓婂洖婧慨鏀圭浉搴旂殑鏁扮粍c
22 {
23 while(t<=n){
24 c[t]+=key;
25 t+=lowbit(t);
26 }
27 }
28 int main()
29 {
30 int i,j,k,m,cas;
31 char e[50];
32 scanf("%d",&cas);
33 while(cas--){
34 scanf("%d",&n);
35 memset(c,0,sizeof(c));
36 for(i=1;i<=n;i++){
37 scanf("%d",&a[i]);
38 modify(i,a[i]);
39 }
40 scanf("%d",&m);
41 while(m--){
42 scanf("%s%d%d",e,&i,&j);
43 if(e[0]=='A'){
44 modify(i,j);
45 a[i]+=j;
46 }
47 else if(e[0]=='D'){
48 if(j>=a[i]) j=(-1)*a[i]; //鐢變簬鍙兘鍒犻櫎鐨勬瘮鐜版湁鐨勮繕澶氾紝闇瑕佸垎寮鑰冭檻
49 else j*=(-1);
50 modify(i,j);
51 a[i]+=j;
52 }
53 else
54 printf("%d\n",sum(j)-sum(i-1)); //鍖洪棿[i,j]鐨勫拰
55 }
56 }
57 }
58
1 #include<stdio.h>
2 #include<string.h>
3 #define M 32006 //鍧愭爣鑼冨洿鏄?2000
4 int c[M],ans[M/2]; //c涓烘爲(wèi)鐘舵暟緇勶紝ans[i]琛ㄧずlevel涓篿鐨勬槦鏄熶釜鏁?/span>
5 int lowbit(int t){
6 return t&(t^(t-1));
7 }
8 int sum(int m){
9 int total=0;
10 while(m>0){
11 total+=c[m];
12 m-=lowbit(m);
13 }
14 return total;
15 }
16 void modify(int position){
17 while(position<=32002){
18 ++c[position];
19 position+=lowbit(position);
20 }
21 }
22 int main()
23 {
24 int x,y,i,j,n;
25 scanf("%d",&n);
26 j=n;
27 memset(c,0,sizeof(c));
28 memset(ans,0,sizeof(ans));
29 while(n--){
30 scanf("%d%d",&x,&y);
31 ++ans[sum(x+1)];
32 modify(x+1);
33 }
34 for(i=0;i<j;++i)
35 printf("%d\n",ans[i]);
36 }