锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
1棣栧厛鎼滅儲欏哄簭鏄厛O鍐岰鍜學(xué)
2鐢ㄥ瓧絎︿覆hash鍑芥暟hash鍒ら噸
3濡傛灉鍙戠幇鏈変袱涓浉閭?cè)潥劸~栫爜瀛楃涔嬮棿鐨勫瓧絎︿覆涓嶆槸鐩爣涓茬殑瀛椾覆鐨勮瘽,灝卞壀鏋?br>榪欐牱鍙互鎶婃墍鏈夌殑鏁版嵁閮?s鍐呮悶瀹?br>[姝よВ娉曟湁涓瀹氱殑鍋剁劧鎬?鍘熷洜鏄疎LFHash閫犳垚鐨?褰撴垜鎶奾ash琛ㄥ紑鍒?00000,鑰屼笖妯$殑閭d釜鏁頒篃鏄?00000鐨勬椂鍊?絎?涓暟鎹繃涓嶅幓).鎵浠ヤ笅闈㈢殑涔熷彲浠ヨ鏄痗heat榪囧幓鐨?姝e湪鐪嬪畼鏂圭殑,鐪嬫噦鍚庢垜浼?xì)鍐嶅彂鍑烘?瀹樻柟鐨勪篃鏄敤鍒癶ash,涓嶈繃hash鐨勬椂鍊欓兘鏄ā涓涓ぇ绱犳暟鐨?涓嶇劧鍐茬獊鐨勫彲鑳芥т細(xì)寰堝ぇ.榪樻湁絎簩縐嶆柟娉曚技涔庢病鐢ㄥ埌hash,鐜頒紶涓婂畼鏂規(guī)姤鍛?/a>]
浠g爜濡備笅:
![]()
code
1
/**//*
2
ID:qcx97811
3
LANG:C++
4
TASK:cryptcow
5
*/
6
#include <stdio.h>
7
#include <string.h>
8
#include <stdlib.h>
9
#include <math.h>
10
11
char ori_str[100] = "Begin the Escape execution at the Break of Dawn";
12
char in_str[100];
13
int ii_c,ii_o,ii_w;
14
bool hash[51071];
15
unsigned int ELFHash( char str[])
16

{
17
unsigned int hash = 0 ;
18
unsigned int x = 0 ;
19
int len = strlen(str);
20
for( int i=0; i< len; i++ )
{
21
hash = ( hash << 4 ) + ( str[i] ) ;
22
if( ( x = hash & 0xF0000000L ) != 0 )
{
23
hash ^= ( x >> 24 ) ;
24
hash &= ~x ;
25
}
26
}
27
28
return (hash & 0x7FFFFFFF);
29
}
30
31
bool could(char str[])
32

{
33
int i,j,len;
34
char tmp[100];
35
len = strlen(str);
36
for(i = 0;i < len;i++)
37
{
38
if('C' == str[i] || 'W' == str[i] || 'O' == str[i])
39
{
40
continue;
41
}
42
j = i+1;
43
for(j = i+1;j < len;j++)
44
{
45
if('C' == str[j] || 'W' == str[j] || 'O' == str[j])
46
{
47
break;
48
}
49
}
50
strncpy(tmp,str+i,j-i);
51
tmp[j-i]='\0';
52
if(NULL == strstr(ori_str,tmp))
53
return false;
54
i = j;
55
}
56
return <span style="COLOR
]]>
]]>
榪欓鐨勪紶緇熷仛娉曞簲璇ユ槸鐭╅樀涔樺惂錛屼笅闈㈣涓嬫濊礬:
棣栧厛浣犲簲璇ョ煡閬撳揩閫熶箻騫傦紝濡傛灉涓嶇煡閬撶殑錛岃google涔嬨傚鏋滅煡閬撲簡蹇熶箻騫傦紝濂借繖棰樹綘宸茬粡鍋氫簡涓澶у崐浜嗭紝鍓╀笅鐨勫氨鏄妸鏈灝忓崟鍏冧粠鏁版敼鎴愮煩闃佃屽凡銆備篃灝辨槸鎶婂揩閫熶箻騫備腑鏁版敼鎴愮煩闃靛氨琛屼簡銆傜劧鍚庡墿涓嬬殑灝辨槸璁$畻鏈虹殑浜嬩簡錛屼綘鍙互絳夌潃OJ鍒や簡錛屼笉涔呭氨浼?xì)杩斿洖Accept銆傛伃鍠滀綘錛屽鏋滀笉鏄殑璇濓紝閭d箞涓棿榪樻湁涓浜涗笢瑗挎病澶勭悊濂斤紝姣斿璇存渶鍚庣粨鏋滃埌搴曟槸鐭╅樀鐨勯偅涓厓绱狅紝榪樻湁涓棿鍒繕浜嗘眰浣欍傚叾浠栫殑搴旇娌¢棶棰樹簡錛屽畬浜嬫敹宸ヤ簡銆?br>絎簩縐嶆濊礬錛屽悓鏍風(fēng)殑log(n),涓嶈繃涓嶇敤鐭╅樀錛岃屾槸闈犻掓帹鍑烘潵鐨勫叕寮忚繘琛岃繍綆楃殑銆?a href="http://m.shnenglu.com/flyinghearts/archive/2010/06/23/118593.html">浠嬬粛璇風(fēng)湅榪?/a>
鐒跺悗絎簩縐嶆濊礬灝卞嚭鏉ヤ簡錛屼笉榪囦腑闂村彲鑳界悊瑙f湁鐐歸毦搴︼紝灝ゅ叾鏄粙緇嶇殑閭i噷鐨則(m),鑷沖皯鎴戠湅鐨勪笉鏄緢鎳傦紝涓嶈繃鎴戠悊瑙g殑鏄繖鏍風(fēng)殑錛岀敤涓暟鍋氫緥瀛愬惂姣斿璇磏=30銆傞偅涔堝寲鎴愪簩榪涘埗鍚庡彉鎴?1110,閭d箞榪涜絎琸嬈′箣鍚?綆桭[30]---->F[15],F[16]---->F[7],F[8]---->F[3],F[4]----->F[1],F[2].鐜板湪鎴戜滑鍙嶈繃鏉ョ湅濡傛灉瑕佹眰F[30]錛屽氨寰楁眰F[15]鍜孎[16],鍚屾椂鍙互寰楀埌F[31],鎴戜滑鐭ラ亾30鍖栨垚浜岃繘鍒剁殑鏈鍚庝竴浣嶆槸0,涔熷氨鏄伓鏁?鐢辨墍緇欐枃绔犵殑鎺ㄥ寮忓彲寰楄榪欎釜鍋舵暟涓?*m,閭d箞鎴戜滑鏄綆桭[2*m]鍜孎[2*m+1],涓嬩竴姝ユ垜浠綆?5鍜?6,鎴戜滑鐭ラ亾鏄綆桭[7]鍜孎[8],(15=2*7+1,16=2*7+2)15鍖栨垚浜岃繘鍒跺悗鏈綅鏄?,涔熷氨鏄鏁?璁句負(fù)2*m+1,閭d箞鏄敱F[m]鍜孎[m+1]寰楀埌錛屽悓鏃跺彲浠ュ緱鍒癋[2*m+2],鐒跺悗鍚庨潰鐨勫垎鏋愬拰榪欎釜涓鏍風(fēng)殑錛屼簬鏄氨鏈変簡鎵緇欐枃绔犵殑閭f浠g爜銆傝璦涓嶆槸寰堟槗鎳傦紝瀹炲湪涓嶆噦灝辮嚜宸卞寲鎴愪簩榪涘埗鎱㈡參鎯沖惂銆?
鍐嶅暟鍡﹀彞:鎴戠敤鐭╅樀16MS,鐢ㄥ悗闈㈢殑鏂規(guī)硶0MS,鍙兘鏄垜鐭╅樀鍐欐悡浜嗐傘傘?
]]>
]]>
灞夸腑瀹冨簭鍙鋒瘮鍜屽畠鐩鎬氦鐨勯偅鏉″叕璺殑搴忓彿澶х殑璇濓紝閭d箞鍦ㄥ彟澶栦竴涓矝灞夸腑錛屼竴瀹氭瘮鍜屽畠鐩鎬氦鐨勯偅鏉″叕璺殑搴忓彿灝忋?br> 榪欐牱鐨勮瘽錛屾垜浠氨鍙互瀵逛竴杈硅繘琛屾帓搴?浠庡ぇ鍒板皬錛屽鏋滅浉絳夊啀鎸夊彟澶栦竴杈逛粠澶у埌灝?錛岃繖鏍峰鐞嗕箣鍚庯紝灝卞彲浠ュ鍙﹀涓杈硅繘琛屾爲(wèi)鐘舵暟緇勭殑鎿嶄綔浜?榪欓噷鐢ㄥ埌浜?br>涓婇潰鐨勯偅涔堜笉絳夊紡)銆傚埌榪欏熀鏈濊礬宸茬粡OK浜嗭紝涓嶈繃緇撴灉涓瀹氳淇濆瓨涓篲_int64 鎴栬卨ong long
浠g爜濡備笅(寤鴻鑷繁鍏堟兂)
![]()
CODE
1
/**//*
2
ID:Klion
3
PROG:POJ_3067
4
LANG:C
5
鏍?wèi)鐘舵暟缁勫Q岃寰楃敤__int64
6
*/
7
#include <stdio.h>
8
#include <stdlib.h>
9
#include <string.h>
10
typedef struct
11

{
12
int a,b;
13
}BRI;
14
BRI bri[1000006];//杈撳叆鏁版嵁鐨勬暟緇?/span>
15
int tree[1000006];//鏍?wèi)鐘舵暟缁?/span>
16
int cmp(const void *e,const void *f)
17

{//鎸塨浠庡ぇ鍒板皬(鑻ョ浉絳夊垯鎸塧浠庡ぇ鍒板皬) 鎺掑簭鐨勬ā鏉?/span>
18
BRI *c = (BRI *)e;
19
BRI *d = (BRI *)f;
20
if(c->b == d->b)
21
return d->a-c->a;
22
return d->b-c->b;
23
}
24
void update(int x,int val)
25

{//鏇存柊鏌愪釜鐐圭殑鍊?/span>
26
while(x <= 1000006)
27
{
28
tree[x] += val;
29
x += (x & -x);
30
}
31
return ;
32
}
33
int read(int x)
34

{//寰楀埌tree[1]-tree[x]鐨勫拰
35
int ret = 0;
36
while(x > 0)
37
{
38
ret += tree[x];
39
x -= (x & -x);
40
}
41
return ret;
42
}
43
int main(void)
44

{
45
freopen("3067.in","r",stdin);
46
freopen("3067.out","w",stdout);
47
int t;
48
int n,m,k;
49
int i,j;
50
__int64 sum;
51
scanf("%d",&t);
52
for(i = 1;i <= t;i++)
53
{
54
scanf("%d%d%d",&n,&m,&k);
55
for(j = 0;j < k;j++)
56
scanf("%d%d",&bri[j].a,&bri[j].b);
57
qsort(bri,k,sizeof(bri[0]),cmp);//鎺掑簭錛屾寜b浠庡ぇ鍒板皬鎺掑簭錛屽鏋渂鐩哥瓑鐨勮瘽錛屽啀鎸塧浠庡ぇ鍒板皬鎺掑簭
58
memset(tree,0,sizeof(tree));
59
sum = 0;
60
for(j = 0;j < k;j++)
61
{//鏍?wèi)鐘舵暟缁勭殑鎿嶄?/span>
62
sum += read(bri[j].a-1);//寰楀埌宸茬粡鎻掑叆榪囩殑鐩寸嚎涓瘮榪欐潯鐩寸嚎鐨刟灝忕殑鐩寸嚎鐨勬潯鏁幫紝涔熷氨鏄拰榪欐潯鐩寸嚎鐩鎬氦鐨勭粨鏋?nbsp; update(bri[j].a,1);//瀵硅繖鏉$洿綰胯繘琛屾彃鍏ユ搷浣?/span>
63
}
64
printf("Test case %d: %I64d\n",i,sum);
65
}
66
return 0;
67
}
68
]]>
]]>
![]()
update
1
void update(int x,int y,int val)
2

{
3
int y1;
4
while(x < max_x)
5
{//鏇存敼澶栭潰鐨勪竴緇存暟緇?/span>
6
y1 = y;
7
while(y1 <= max_y)
8
{//瀵規(guī)瘡涓闈㈢殑涓緇存暟緇勬墍鍖呭惈鐨勪竴緇存暟緇勮繘琛屾洿鏀?/span>
9
tree[x][y1] += val;
10
y1 += (y1 & -y1);
11
}
12
x += (x & -x);
13
14
}
15
}
![]()
read
1
int read(int x,int y)
2

{
3
int y1,ret;
4
while(x > 0)
5
{//姹傚闈㈢殑涓緇存暟緇勭殑鍜?/span>
6
y1 = y;
7
while(y1 > 0)
8
{//瀵規(guī)瘡涓竴緇存暟緇勬墍鍖呭惈鐨勪竴緇存暟緇勬眰鍜?/span>
9
ret += tree[x][y1];
10
y1 -= (y1 & -y1);
11
}
12
x -= (x & -x);
13
}
14
return ret;//鏈鍚庣殑緇撴灉
15
}
16
]]>
II.姹備竴涓暟緇勭殑鏌愪竴涓暟鎹殑鍓嶉潰鎵鏈夋暟鎹腑姣斿畠?yōu)?鎴栧ぇ)鐨勬墍鏈夋暟鐨勪釜鏁?br>瀵逛簬絎竴涓紝鎴戜滑鍙互鐢ㄤ竴涓猻truct錛岀劧鍚庨噷闈㈠瓨涓や釜淇℃伅錛屼竴涓槸val錛屼竴涓槸no錛屽叾涓璿al鏄緭鍏ョ殑鏁幫紝no鏄敤鏉ョ鏁e寲鐨勩?br>瀵逛簬絎簩涓紝寰堝浜鴻鏄爲(wèi)鐘舵暟緇勭殑鍩烘湰鍔熶簡錛屼絾鏄垜瑙夊緱鐪嬫庝箞緇撴潫鏍?wèi)鐘舵暟缁勭殑銆傚湪榪欓噷浣犲彲浠ュ姣忎竴涓暟update(a[i],1),鐒跺悗鍐峠etsum(a[i])(a[i]鏄鏁e寲鍚庣殑鏁扮粍)銆傝繖鏍風(fēng)殑璇濓紝浣犲啀鐢╥ - getsum(a[i])灝辨槸閫嗗簭鏁扮殑瀵規(guī)暟浜嗭紝濡傛灉涓嶅ソ鐞嗚В鐨勮瘽錛屽彲浠ョ敤5 2 1 4 3榪欎釜鏁扮粍鏉ユā鎷熶笅銆?br>瀵逛簬榪欎袱涓棶棰樿В鍐充簡涔嬪悗錛岃繖棰樺氨綆鍗曚簡
涓嬮潰緇欏嚭浠g爜(榪樻槸寤鴻鑷繁鍏堟兂錛屼笉榪囩鏁e寲娌℃帴瑙︾殑錛屽彲鑳戒細(xì)姣旇緝闅炬兂錛屾爲(wèi)鐘舵暟緇勮繕琛屽惂)
![]()
CODE
1
/**//*
2
ID:Klion
3
PROG:POJ_2299
4
LANG:C++
5
鏍?wèi)鐘舵暟缁勭?br> 6
姣斿綊騫舵帓搴忓揩澶氫簡~~~
7
娉ㄦ剰涓ょ偣錛孖.紱繪暎鍖?nbsp;
8
II.鏍?wèi)鐘舵暟缁勬眰涓涓鏁e寲鍚庣殑鏁扮粍閲岄潰鐨勬煇涓涓暟鐨勫墠闈㈢殑鏁版嵁涓?br> 9
鏈夊灝戜釜姣斿畠?yōu)畯鐨勬?br>10
*/
11
#include<iostream>
12
using namespace std;
13
const int MAX = 500006;
14
int tree[MAX];
15
typedef struct
16

{
17
int val,no;//val鏄緭鍏ョ殑鍊鹼紝no琛ㄧず鏄鍑犱釜錛岀敤鏉ョ鏁e寲鐢?/span>
18
}Node;
19
Node num[MAX];//瀛樿緭鍏ユ暟鎹?/span>
20
int aa[MAX];//瀛樼鏁e寲涔嬪悗鐨勪俊鎭紝紱繪暎鍖栧晩紱繪暎鍖?/span>
21
int cmp(const void * a,const void * b)//紱繪暎鍖栨椂鐢ㄧ敤鍒扮殑鎺掑簭妯℃澘
22

{
23
return ((Node *)a)->val - ((Node *)b) ->val;
24
}
25
void update(int idx,int val)
26

{//鏍?wèi)鐘舵暟缁勭殑鏇存?/span>
27
while(idx <= MAX)
28
{
29
tree[idx] += val;
30
idx += (idx & -idx);
31
}
32
return ;
33
}
34
int getsum(int idx)
35

{//鏍?wèi)鐘舵暟缁勭殑姹傚?/span>
36
int ret = 0;
37
while(idx > 0)
38
{
39
ret += tree[idx];
40
idx -= (idx & -idx);
41
}
42
return ret;
43
}
44
int main(void)
45

{
46
int n;
47
__int64 sum;
48
while((EOF != scanf("%d",&n)) && n)
49
{
50
for(int i = 1;i <= n;i++)
51
{
52
scanf("%d",&num[i].val);
53
num[i].no = i;
54
}
55
//鐢ㄤ簬紱繪暎鍖栫殑鎺掑簭
56
qsort(num+1,n,sizeof(num[0]),cmp);
57
for(int i = 1;i <= n;i++)
58
{//榪欓噷紱繪暎鍖栵紝鎶妌涓偣鏄犲皠鍒?-n
59
aa[num[i].no] = i;
60
}
61
memset(tree,0,sizeof(tree));
62
sum = 0;
63
for(int i = 1;i <= n;i++)
64
{//鏇存柊鍙?qiáng)璁〗帡缁撴?/span>
65
update(aa[i],1);
66
sum += (i - getsum(aa[i]));
67
}
68
printf("%I64d\n",sum);
69
}
70
}
71
]]>
瀵逛簬鏁扮粍a,褰掑茍鎺掑簭鏃剁殑鍚堝茍闃舵錛屽垎鎴愪袱孌碉紝涔熷氨鏄?start,mid)鍜?mid,end)(鎴戣繖閲岀涓孌電殑涓嬫爣鏄粠start鍒癿id-1錛?br>絎簩孌電殑涓嬫爣鏄粠mid鍒癳nd-1)銆傜敤涓変釜涓嬫爣鍒嗗埆鎸囧悜鍓嶉潰涓孌?i)錛屽悗闈竴孌?j)錛屽拰鏂版暟緇勪笅鏍?idx).閭d箞褰撳嚭鐜?br>num[j] < num[i]鐨勬椂鍊欙紝緇撴灉灝卞簲璇ュ姞鍓嶉潰涓孌佃繕娌℃湁榪涘叆鏂版暟緇勭殑鏁版嵁鐨勯暱搴?姣斿璇村綋鍓峣 = 3錛沯 = 8錛沵id = 5涓?br>num[8] < num[3]錛涢偅涔堢粨鏋滃簲璇ュ姞涓?5-3=2)(璁頒綇鎴戠殑鍓嶉潰涓孌墊槸鍒癿id-1緇撴潫)錛屽洜涓哄湪榪欐褰掑茍鐨勮繃紼嬩腑瑕佺Щ鍔?5-3=2)嬈★紝
鍥犱負(fù)(num[3],num[8])鏄竴涓嗗簭瀵癸紝鍚屾椂(num[4],num[8])鏄竴涓嗗簭瀵?浼間箮榪欓噷鐞嗚В璧鋒潵鏈夌偣鍥伴毦-_-錛屽彲浠ョ敾涓涓浘錛?br>鑷繁鎵嬪姩鎵ц涓嬶紝姣斿絎竴涓牱渚嬪氨琛岋紙9,1,0,5,4錛夛紝鑷繁鎵嬪姩鎵ц涓嬶紝灝辯煡閬撲負(fù)浠涔堜簡)銆傞偅涔堣繖鏍風(fēng)殑璇濆簲璇ュ氨濂藉仛浜嗭紝
鏈鍚庝竴鐐瑰氨鏄粨鏋滀細(xì)瓚卛nt鐢╨ong long鎴栬卂_int64瀛?br>浠g爜濡備笅(渚濇棫錛屽緩璁鑰呭厛鑷繁鍐?
![]()
CODE
1
/**//*
2
ID:Klion
3
PROG:POJ_2299
4
LANG:C++
5
*/
6
#include<iostream>
7
using namespace std;
8
int num[500006];
9
__int64 total;
10
void merge(int start,int mid,int end)
11

{
12
int tmp[500006];
13
int i = start;
14
int j = mid;
15
int idx = 0;
16
//鏀懼埌tmp鏁扮粍閲岄潰
17
for(;i < mid && j < end;)
18
{
19
if(num[i] < num[j])
20
{
21
tmp[idx] = num[i];
22
idx++;
23
i++;
24
}
25
else
26
{
27
tmp[idx] = num[j];
28
idx++;
29
j++;
30
total += (mid-i);
31
}
32
}
33
//鎶婂墿涓嬬殑閮芥斁鍒皌mp鏁扮粍閲岄潰鍘?/span>
34
for(;i < mid;i++)
35
{
36
tmp[idx++] = num[i];
37
}
38
for(;j < end;j++)
39
{
40
tmp[idx++] = num[j];
41
}
42
//鎶婃帓濂藉簭鐨勫啀璧嬪煎埌num鏁扮粍涓?/span>
43
for(j = start,i = 0;i < idx;i++,j++)
44
num[j] = tmp[i];
45
}
46
void merge_sort(int start,int end)
47

{
48
if(start + 1 == end)
49
{
50
return;
51
}
52
int mid = (start + end) >> 1;
53
merge_sort(start,mid);
54
merge_sort(mid,end);
55
merge(start,mid,end);
56
}
57
int main(void)
58

{
59
freopen("2299.in","r",stdin);
60
freopen("2299.out","w",stdout);
61
int n;
62
while(scanf("%d",&n),n)
63
{
64
total = 0;
65
for(int i = 0;i < n;i++)
66
{
67
scanf("%d",&num[i]);
68
}
69
merge_sort(0,n);
70
printf("%I64d\n",total);
71
}
72
return 0;
73
}
74
]]>
1. T i j (turn cards from index i to index j, include i-th and j-th card - card which was face down will be face up; card which was face up will be face down)
2. Q i (answer 0 if i-th card is face down else answer 1)
榪欓噷鏄洿鏂頒竴孌碉紝浣嗘槸鍙眰涓鐐癸紝鍜屾垜浠竴鑸殑鎬濊礬涓嶄竴鏍鳳紝浣嗘槸涓嶆墦绱э紝鎴戜滑鍙互鏀瑰彉鎬濈淮錛屾垜浠彲浠ヨ繖鏍鋒兂(寮曠敤)
This has solution for each query (and 1 and 2) has time complexity O(log n). In array f (of length n + 1)we will
store each query T (i , j) - we set f[i]++ and f[j + 1]--. For each card k between i and j (include i and j)
sum f[1] + f[2] + ... + f[k] will be increased for 1, for all others will be same as before
(look at the image 2.0 for clarification), so our solution will be described sum
(which is same as cumulative frequency) module 2.
鐪嬩簡榪欎箣鍚庯紝鏄笉鏄彂鐜板師鏉ヨ繕鍙互榪欐牱鍟婏紝鍛靛懙錛岃繖灝辨槸鎬濈淮杞崲浜嗭紝濡傛灉浣犲凡緇忕煡閬撹繖涓濊礬浜嗭紝閭d箞榪欑瘒鏂囩珷鍩烘湰涓嶇敤鐪嬩簡錛屽洜涓轟綘宸茬粡浼?/pre>
濂戒簡錛屾帴涓嬫潵鎴戜滑璇磋POJ榪欓鍚э紝浣犳槸涓嶆槸鍙戠幇榪欓鍜屼笂闈㈤偅涓嫳鏂囨弿榪扮殑棰樺緢鍍忓憿錛屽彧涓嶈繃榪欎釜鏄簩緇寸殑錛屾仼錛岀‘瀹烇紝鍏跺疄涓婇潰閭d釜灝辨槸
POJ_2155鐨勪竴緇寸増鏈紝濂戒簡榪欐牱璇達(dá)紝浣犲簲璇ユ噦浜嗗惂銆備笅闈㈢湅鐪嬩唬鐮佸惂(寤鴻鍏堣嚜宸辨兂鍝?錛屽啀鎻愪緵綃?a href="http://m.shnenglu.com/Files/klion/1.pdf">闆嗚璁烘枃鍚?/pre>
![]()
CODE
1
/**//*
2
ID:Klion
3
PROG:POJ_2155
4
LANG:C++
5
*/
6
#include <iostream>
7
using namespace std;
8
int n;
9
int num[1002][1002];
10
void update(int x,int y)
11

{//榪欓噷紜疄寰堝竻鍟?/span>
12
int y1;
13
while(x <= n)
14
{
15
y1 = y;
16
while(y1 <= n)
17
{
18
num[x][y1] ^= 1;
19
y1 += (y1 & -y1);
20
}
21
x += (x & -x);
22
}
23
}
24
void work(int x1,int y1,int x2,int y2)
25

{//涓昏鏄繖閲岋紝濂藉ソ鎯蟲竻妤?/span>
26
update(x1,y1);
27
update(x2+1,y1);
28
update(x1,y2+1);
29
update(x2+1,y2+1);
30
}
31
int read(int x,int y)
32

{
33
int ret=0;
34
int y1;
35
while(x > 0)
36
{
37
y1 = y;
38
while(y1 > 0)
39
{
40
ret = ((ret + num[x][y1]) & 1);
41
y1 -= (y1 & -y1);
42
}
43
x -= (x & -x);
44
}
45
ret &= 1;
46
return ret;
47
}
48
int main(void)
49

{
50
freopen("POJ_2155.in","r",stdin);
51
freopen("POJ_2155.out","w",stdout);
52
int t;
53
int x1,y1,x2,y2;
54
int x,y;
55
int l;
56
char str[2];
57
scanf("%d",&t);
58
while(t--)
59
{
60
memset(num,0,sizeof(num));
61
scanf("%d%d%*c",&n,&l);
62
for(int i = 0;i < l;i++)
63
{
64
scanf("%s",str);
65
if('Q' == str[0])
66
{
67
scanf("%d%d%*c",&x,&y);
68
printf("%d\n",read(x,y));
69
}
70
else
71
{
72
scanf("%d%d%d%d%*c",&x1,&y1,&x2,&y2);
73
work(x1,y1,x2,y2);
74
}
75
}
76
printf("\n");
77
}
78
return 0;
79
}
80
]]>![]()
CODE
1
/**//*
2
ID:Klion
3
PRO:POJ_2352
4
LANG:C++
5
*/
6
#include <iostream>
7
using namespace std;
8
int level[15002];
9
int tree[32000*4];//綰挎鏍?wèi)鍐呭瓨瑕佹眰鍩烘湰鏄痭*4
10
int find(int i,int x,int left = 0,int right = 32000)
11

{
12
tree[i]++;
13
if(x == right)
14
return tree[i]-1;//鍑忓幓鑷繁
15
int mid = (left + right) >> 1;
16
if(x <= mid)
17
return find(i<<1,x,left,mid);
18
else
19
return tree[i<<1]+find((i<<1) + 1,x,mid+1,right);
20
}
21
int main(void)
22

{
23
int n;
24
int x,y;
25
scanf("%d",&n);
26
for(int i = 0;i < n;i++)
27
{
28
scanf("%d%d",&x,&y);
29
level[find(1,x)]++;//鏌ヨ錛屾彃鍏ヤ竴騫舵搷浣?/span>
30
}
31
for(int i = 0;i < n;i++)
32
printf("%d\n",level[i]);
33
return 0;
34
}
35
]]>
鍚庢潵鐪嬪埌鏈変簺blog(榪欎釜閾炬帴浠ュ墠寮勯敊浜?鍦ㄦ琛ㄧず涓嶅ソ鎰忔?鍐欏埌2352鏄叆闂ㄩ銆?br>琛ㄧず鎴戜竴寮濮嬩笉浼?xì)鍐欏Q屽悗鏉ユ槸鐪嬩簡浜哄鐨勬濊礬鎵嶅啓鍑烘潵鐨?_-.
鐢ㄦ爲(wèi)鐘舵暟緇勶紝涓嶇敤綆鍧愭爣錛堝洜涓哄凡緇忔槸鍗囧簭錛屽悗杈圭殑鏄熸槦涓嶅獎鍝嶅墠杈規(guī)槦鏄熺殑絳夌駭錛夛紝鐢╨evel(n)鏉ョ粺璁鍧愭爣涓簄浠ュ墠鐨勬槦鏄熶釜鏁幫紝浣嗘槸鍗冧竾娉ㄦ剰鏍?wèi)鐘舵暟缁勯渶瑕佹暟緇勪互1涓洪欏癸紝鐢變簬鍧愭爣鏈?錛屾墍浠ユ瘡嬈¢渶瑕佺粰x鍧愭爣+1(鍥犱負(fù)鍑虹幇0浼?xì)姝诲惊鐜?
榪樻湁涓鐐瑰氨鏄偅綃囪嫳鏂囩殑浠嬬粛閲岄潰鏈夌偣灝忛敊璇紝灝辨槸scale鐨勭涓涓嚱鏁頒腑錛岃皟鐢╱pdate鏃跺弬鏁頒紶鍙嶄簡
using namespace std;
int tree[32006];
int level[32006];
int n;
void update(int idx)//鏇存柊錛屽洜涓烘墍鏈夌殑閮藉彧浼?xì)澧炲?,鎵浠ュ彧鐢ㄤ紶涓涓弬鏁板氨琛屼簡
{
while(idx <= 32006)
{
tree[idx]++;
idx += (idx & (-idx));
}
}
int read(int idx)
{//姹備竴孌墊暟緇勭殑鍜?/span>
int sum = 0;
while(idx > 0)
{
sum += tree[idx];
idx -= (idx & (-idx));
}
return sum;
}
int main(void)
{
freopen("2352.in","r",stdin);
freopen("2352.out","w",stdout);
int x,y;
scanf("%d",&n);
memset(tree,0,sizeof(tree));
memset(level,0,sizeof(level));
for(int i = 0;i < n;i++)
{
scanf("%d%d",&x,&y);
x++;//闃叉鍑虹幇涓嬫爣0
level[read(x)]++;//鍏堝緱鍒版敼鐐圭殑level鍊?/span>
update(x);//鏇存柊浠涓轟笅鏍囩殑tree鏁扮粍鍊?/span>
}
for(int i = 0;i < n;i++)
{
printf("%d\n",level[i]);//涓嶇敤鍑? 鍥犱負(fù)鎴戞槸鍏堟眰鍦ㄦ洿鏂扮殑
}
return 0;
}
]]>
]]>
]]>