zoukankan      html  css  js  c++  java
  • http://www.codeforces.com/contest/703/problem/D D. Mishka and Interesting sum (莫队的TLE)

    /*
    莫队算法的常数优化 实战演练 虽然是TLE代码
    */

    #include<bits/stdc++.h> using namespace std; const int maxn = 1000000 + 100; int block; struct query{ int l, r, id; bool operator < (const query &rhs)const{ return (l/block == rhs.l /block) ? r < rhs.r : l/block < rhs.l/block; } }q[maxn]; int a[maxn]; int cnt[maxn]; int ans[maxn]; int pre[maxn]; int main(){ int n; scanf("%d", &n); memset(cnt, 0, sizeof(cnt)); pre[0] = 0; for(int i = 1; i <= n; ++i) scanf("%d", &a[i]), pre[i] = pre[i-1]^a[i]; int m; scanf("%d", &m); block = ceil(sqrt(m*1.0)); for(int i = 0; i < m; ++i){ scanf("%d%d", &q[i].l, &q[i].r); q[i].id = i + 1; } sort(q, q + m); int curl, curr; curl = curr = 0; int res = 0; for(int i = 0; i < m; ++i){ if(i){ if(q[i].r < q[i-1].r){ while(curl <= curr) cnt[a[curl++]] = 0; res = 0; curl = q[i].l; curr = q[i].r; //++cnt[a[curl]]; int k = curl; while(k <= curr){ ++cnt[a[k]]; if(cnt[a[k]] == 1) res ^= a[k]; ++k; } ans[q[i].id] = res^pre[q[i].r]^pre[q[i].l-1]; continue; } } if(curl < q[i].l){ while(curl < q[i].l){ --cnt[a[curl]]; if(cnt[a[curl]] == 0) res ^= a[curl]; ++curl; } } if(curl > q[i].l){ while(curl > q[i].l){ --curl; ++cnt[a[curl]]; if(cnt[a[curl]] == 1) res ^= a[curl]; } } if(curr < q[i].r){ while(curr < q[i].r){ ++curr; ++cnt[a[curr]]; if(cnt[a[curr]] == 1) res ^= a[curr]; } } if(curr > q[i].r){ while(curr > q[i].r){ --cnt[a[curr]]; if(cnt[a[curr]] == 0) res ^= a[curr]; --curr; } } ans[q[i].id] = res^pre[q[i].r]^pre[q[i].l-1]; } for(int i = 1; i <= m; ++i) printf("%d ", ans[i]); }
  • 相关阅读:
    最大流最小割
    最大权闭合图
    凸包,多边形面积,线段在多边形内的判定。
    模线性方程
    ZOJ Monthly, August 2014
    nenu contest2
    2014 Multi-University Training Contest 10
    Codeforces Round #262 (Div. 2)
    nenu contest
    poj 2299 求逆序数
  • 原文地址:https://www.cnblogs.com/boson-is-god/p/5746448.html
Copyright © 2011-2022 走看看