Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define boAshraf ios_base::sync_with_stdio(false); cin.tie(NULL);
- #define ll long long
- #define sz(s) (int)(s).size()
- #define all(s) (s).begin(),(s).end()
- using namespace std;
- void File();
- void sol();
- int main() {
- boAshraf
- // File();
- freopen("army.in", "r", stdin);
- int t = 1;
- cin >> t;
- while (t--) {
- sol();
- }
- return 0;
- }
- void sol() {
- int n,m;
- cin>>n>>m;
- ll tot=1ll*(n)*(n-1)/2;
- ll All=1ll*(n)*(n+1)/2;
- unordered_map<ll,ll>changed;
- auto calc=[&](ll x)->ll{
- ll val=(ll)((-1 + sqrt(1 + 8 * x)) / 2);;
- if(val*(val+1)/2 !=x)val++;
- return val;
- };
- auto equal=[&](ll a, ll b)->bool{
- ll val1=changed.count(a)?changed[a]:calc(a);
- ll val2=changed.count(b)?changed[b]:calc(b);
- return val1==val2;
- };
- auto del=[&](ll x){
- ll before=x-1,after=x+1;
- if(before!=0 && equal(before, x))tot--;
- if(after!=All+1 && equal(x, after))tot--;
- };
- auto add=[&](ll x)->void{
- ll before=x-1,after=x+1;
- if(before!=0 && equal(before, x))tot++;
- if(after!=All+1&& equal(x, after))tot++;
- };
- auto Swap=[&](ll a,ll b){
- ll val1=changed.count(a)?changed[a]:calc(a);
- ll val2=changed.count(b)?changed[b]:calc(b);
- changed[b]=val1;
- changed[a]=val2;
- };
- while(m--){
- ll a,b;
- cin>>a>>b;
- if(equal(a, b))continue;
- del(a);
- del(b);
- Swap(a,b);
- add(a);
- add(b);
- }
- cout<<tot<<'\n';
- }
- void File() {
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- }
Advertisement
Add Comment
Please, Sign In to add comment