把輸出的false打成flase了…一直沒注意到…
先將區間和轉成字首和
那麼就知道了若干條形如sr
−sl−
1=c 的資訊
能判斷出賬本是假的當且僅當通過已知的資訊得到的sr
−sl−
1≠c
於是維護乙個帶權並查集,當
r 和l−
1在同乙個集合裡的時候,利用維護的和根的差算出sr
−sl−
1 判斷是否和
c 相同
code:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
using
namespace
std;
inline
void read(int &x)
const
int maxn = 510000;
const
int maxm = 510000;
const
int maxb = 21;
int n,m;
int fa[maxn],fc[maxn];
int find_(const
int x)
int main()
else
//y-t=fcy,x-t=fcx -> y-x=fcy-fcx
}if(flag) printf("true\n");
else
printf("false\n");
}return
0;}
狡猾的商人 bzoj1202,HNOI2005
ac通道 分析 因為每月的總收入可以為正,也可以為負,所以要比較兩個區間是否相符,當且僅當它們邊界都相同時才能比較。我們設w i 表示第1 i個月的總收入與第1 fa i 1 個月的總收入之差,及第fa i i個月的總收入。如圖。若i 1,j在同乙個集合中,則第i j個月的總收入為w j w i 1...
BZOJ1202 HNOI2005 狡猾的商人
time limit 10 sec memory limit 162 mb submit 4198 solved 2026 submit status discuss 刁奼接到乙個任務,為稅務部門調查一位商人的賬本,看看賬本是不是偽造的。賬本上記錄了n個月以來的收入情況,其中第i 個月的收入額為ai...
BZOJ1202 HNOI2005 狡猾的商人
bzoj1202 hnoi2005 狡猾的商人 試題描述 刁奼接到乙個任務,為稅務部門調查一位商人的賬本,看看賬本是不是偽造的。賬本上記錄了n個月以來的收入情況,其中第i 個月的收入額為ai i 1,2,3.n 1,n 當 ai大於0時表示這個月盈利ai 元,當 ai小於0時表示這個月虧損ai 元。...