题面

Poj

题解

反正只要你判断是否满足区间的奇偶性,假设每一位要么是$1$要么是$0$好了。

假设有$S$的前缀和为$sum[]$,则有:

若$S[l...r]$中有奇数个$1$,则$sum[l-1]$与$sum[r]$不同奇偶;反之,则同奇偶

用一个带权并查集维护,设权值数组$s[i]$表示区间$[root[i]...i]$的和的奇偶性。

对于一个区间$[l,r]$,分情况讨论:

如果$root[l]=root[r]$,直接判断就行了。

否则的话,计算一下$s[fv]=t\oplus s[u]\oplus s[v]$

但是$n$太大了,需要离散化(懒人离散化用$map$,美滋滋)

#include <map>
#include <cstdio>
#include <cstring>
using std::map;
typedef long long ll; const ll N = 1e4 + 10, Q = 5e3 + 10;
ll n, q, s[N], f[N], cnt;
map <ll, ll> m; ll find (ll x) {
if(f[x] == -1) return x;
ll tmp = find(f[x]);
s[x] ^= s[f[x]];
return f[x] = tmp;
} ll insert (ll x) {
if (m.find(x) == m.end()) m[x] = ++cnt;
return m[x];
} int main() {
while (scanf ("%lld%lld", &n, &q) != EOF) {
char str[4];
memset(f, -1, sizeof f);
memset(s, 0, sizeof s);
ll ans = q;
for (register ll i = 1, u, v; i <= q; ++i) {
scanf ("%lld%lld%s", &u, &v, str);
if (ans < q) continue;
u = insert(u - 1), v = insert(v);
ll fu = find(u), fv = find(v);
ll t = 0;
if (str[0] == 'o') ++t;
if (fu == fv) { //root相等
if (s[u] ^ s[v] != t)
ans = i - 1;
} else { //一定有fu<fv(编号比较)
f[fv] = fu;
s[fv] = s[u] ^ s[v] ^ t;
//矢量的异或运算
}
}
printf ("%lld\n", ans);
}
return 0;
}

最新文章

  1. 9.PNG的制作
  2. VS调试经常打断点打上之后没反应的问题
  3. okhttp封装时,提示 cannot resolve method OkHttpClient setConnectTimeout() 函数
  4. [转载]T-SQL(MSSQL)语句查询执行顺序
  5. android Studio NDK
  6. 理解TCP可靠的通信
  7. 转:ASP.NET中的SESSION实现与操作方法
  8. DIY一款C/C++编译器
  9. javascsript 去除数组重复数据
  10. Hdu3714-Error Curves(三分)
  11. 精通CSS+DIV基础总结(三)
  12. Python冒泡算法和修改配置文件
  13. 解决若要安装 Microsoft Office 2010,需要MSXML 版本 6.10.1129的问题
  14. leetcode — pascals-triangle-ii
  15. 使用Visual Studio 2017 C++17模块(module)特性
  16. Handshake failed due to invalid Upgrade header: null 解决方案
  17. c++内存对齐原理
  18. SPI内容随笔
  19. on条件与where条件的区别
  20. js中闭包的概念和用法

热门文章

  1. PHP系统编程--03.PHP进程信号处理
  2. Jmeter-分布式
  3. js常用模板引擎
  4. D题 hdu 1412 {A} + {B}
  5. MySQL当中的case when then
  6. 用intellj 建一个spring mvc 项目DEMO
  7. Python抓取花瓣网高清美图
  8. [How to]Cloudera manager 离线安装手册
  9. MYSQL5.5源码安装 linux下
  10. Android ADT插件更新后程序运行时抛出java.lang.VerifyError异常解决办法