吐槽:比赛刚开始codeblocks出了点问题。。边看题边弄编译器。。。囧。。
D居然一直没看。。因为E题意好懂。。然后sb地卡了一场E。。。战斗力太不稳定。。。
A...
A
1 #include2 #include 3 #include 4 #define N 100010 5 using namespace std; 6 int ans[N][2]; 7 int main(){ 8 int x,y,a,b; 9 while(cin>>x>>y>>a>>b){10 int cnt=0;11 for(int i=a;i<=x;i++){12 for(int j=b;j <=y;j++){13 ans[++cnt][0]=i;14 ans[cnt][1]=j;15 }16 }17 cout< <
B....
B
1 #include2 #include 3 #include 4 #define N 100010 5 using namespace std; 6 struct S{ 7 int l,r,len,id; 8 }s[N]; 9 bool cmp(S a,S b){10 return a.len>b.len;11 }12 int main(){13 int n;14 while(cin>>n){15 int ll=(1<<30),rr=-1;16 for(int i=1;i<=n;i++){17 cin>>s[i].l>>s[i].r;18 s[i].len=s[i].r-s[i].l+1;19 s[i].id=i;20 ll=min(ll,s[i].l);21 rr=max(rr,s[i].r);22 }23 sort(s+1,s+1+n,cmp);24 if(s[1].len==(rr-ll+1))25 cout< <
C.想了半天也不会。。知道是bfs,但是1e9的范围太尼玛大了。。然后看了下师傅代码。。神奇的map....Orz
C
1 #include2 #include 3 #include 4 #include
D.解法:贪心。。。如果当前节点的值是最后不想要的,那么就press一下,因为被press之后就再也不可能回到原来的值了。。。
尼玛。。比赛的时候看都没看。。。
D
1 #include2 #include 3 #include 4 #include 5 #include 6 #define N 100010 7 using namespace std; 8 vector V[N]; 9 int s[N];10 int x[N],ans[N];11 bool used[N];12 int c;13 void dfs(int rt){14 for(int i=0;i >n>>m){28 memset(s,0,sizeof(s));29 c=0;30 memset(used,0,sizeof(used));31 for(int i=1;i<=n;i++)V[i].clear();32 for(int i=1;i<=m;i++){33 int a,b;34 cin>>a>>b;35 V[a].push_back(b);36 V[b].push_back(a);37 }38 for(int i=1;i<=n;i++)cin>>x[i];39 int w;40 for(int i=1;i<=n;i++){41 if(s[i]==x[i]){42 s[i]++;43 dfs(i);44 ans[++c]=i;45 }46 }47 cout< <
E.线段树维护即可。。。拆位。。。
统计每个区间每个二进制位上出现的1的个数。。最后求和的时候加一遍就行。。。异或相当于把这个数位上所以的1变成0.。。0变成1
E
1 #include2 #include 3 #include 4 #include 5 #define N 100010 6 #define lson l,m,n<<1 7 #define rson m+1,r,n<<1|1 8 using namespace std; 9 typedef long long ll; 10 ll s[N<<2][30]; 11 ll flag[N<<2]; 12 ll ans; 13 void pushup(int n){ 14 for(int i=0;i<30;i++){ 15 s[n][i]=s[n<<1][i]+s[n<<1|1][i]; 16 } 17 } 18 void pushdown(int n,int m){ 19 if(flag[n]){ 20 flag[n<<1]^=flag[n]; 21 flag[n<<1|1]^=flag[n]; 22 int f=flag[n]; 23 for(int i=0;i<30;i++){ 24 if(f&1){ 25 s[n<<1][i]=m-(m>>1)-s[n<<1][i]; 26 s[n<<1|1][i]=(m>>1)-s[n<<1|1][i]; 27 } 28 f>>=1; 29 } 30 flag[n]=0; 31 } 32 } 33 void build(int l,int r,int n){ 34 memset(s[n],0,sizeof(s[n])); 35 flag[n]=0; 36 if(l==r){ 37 int a; 38 cin>>a; 39 for(int i=0;i<30;i++){ 40 if(a&1)s[n][i]=1; 41 a>>=1; 42 } 43 return ; 44 } 45 int m=(l+r)>>1; 46 build(lson); 47 build(rson); 48 pushup(n); 49 50 } 51 void update(int ll,int rr,int x,int l,int r,int n){ 52 if(ll==l&&rr==r){ 53 flag[n]^=x; 54 for(int i=0;i<30;i++){ 55 if(x&1)s[n][i]=(r-l+1)-s[n][i]; 56 x>>=1; 57 } 58 return ; 59 } 60 pushdown(n,r-l+1); 61 int m=(l+r)>>1; 62 if(rr<=m) 63 update(ll,rr,x,lson); 64 else if(ll>m) 65 update(ll,rr,x,rson); 66 else 67 update(ll,m,x,lson),update(m+1,rr,x,rson); 68 pushup(n); 69 } 70 void query(int L,int R,int l,int r,int n){ 71 if(L==l&&R==r){ 72 for(int i=0;i<30;i++) 73 ans+=s[n][i]*(1LL< >1; 78 if(R<=m)query(L,R,lson); 79 else if(L>m)query(L,R,rson); 80 else query(L,m,lson),query(m+1,R,rson); 81 } 82 int main(){ 83 int n,m; 84 int op,l,r,x; 85 while(cin>>n){ 86 build(1,n,1); 87 cin>>m; 88 while(m--){ 89 cin>>op; 90 if(op==1){ 91 cin>>l>>r; 92 ans=0; 93 query(l,r,1,n,1); 94 cout< < >l>>r>>x; 97 update(l,r,x,1,n,1); 98 } 99 }100 }101 return 0;102 }