結果

問題 No.3390 Public or Private
コンテスト
ユーザー tnakao0123
提出日時 2025-11-29 18:15:42
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 294 ms / 2,000 ms
コード長 1,415 bytes
コンパイル時間 651 ms
コンパイル使用メモリ 67,316 KB
実行使用メモリ 32,384 KB
最終ジャッジ日時 2025-11-29 18:15:53
合計ジャッジ時間 9,476 ms
ジャッジサーバーID
(参考情報)
judge3 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 27
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:41:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   41 |   scanf("%d%d", &n, &m);
      |   ~~~~~^~~~~~~~~~~~~~~~
main.cpp:46:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   46 |     scanf("%d%d", &u, &v);
      |     ~~~~~^~~~~~~~~~~~~~~~
main.cpp:53:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   53 |   scanf("%d", &qn);
      |   ~~~~~^~~~~~~~~~~
main.cpp:56:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   56 |     scanf("%d%d%d", &qi, &ai, &bi);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~

ソースコード

diff #
raw source code

/* -*- coding: utf-8 -*-
 *
 * 3390.cc:  No.3390 Public or Private - yukicoder
 */

#include<cstdio>
#include<map>
#include<set>
#include<algorithm>

using namespace std;

/* constant */

/* typedef */

using si = set<int>;
using misi = map<int,si>;

/* global variables */

/* subroutines */

int countand(si &s0, si &s1) {
  auto sit0 = s0.begin(), se0 = s0.end();
  auto sit1 = s1.begin(), se1 = s1.end();

  int cnt = 0;
  while (sit0 != se0 && sit1 != se1) {
    if (*sit0 < *sit1) sit0++;
    else if (*sit0 > *sit1) sit1++;
    else cnt++, sit0++, sit1++;
  }
  return cnt;
}

/* main */

int main() {
  int n, m;
  scanf("%d%d", &n, &m);

  misi fs;
  for (int i = 0; i < m; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    fs[u].insert(v);
  }

  si ps;
  
  int qn;
  scanf("%d", &qn);
  while (qn--) {
    int qi, ai, bi;
    scanf("%d%d%d", &qi, &ai, &bi);

    if (qi == 1) {
      auto mit = fs.find(ai);
      if (mit == fs.end()) fs[ai].insert(bi);
      else {
	auto &fsa = mit->second;
	auto sit = fsa.find(bi);
	if (sit == fsa.end()) fsa.insert(bi);
	else fsa.erase(sit);
      }
    }
    else {
      auto sit = ps.find(ai);
      if (sit == ps.end()) ps.insert(ai);
      else ps.erase(sit);
    }

    int cnt = n - ps.size() - (1 - ps.count(ai));
    auto mit = fs.find(ai);
    if (mit != fs.end())
      cnt += countand(mit->second, ps);

    printf("%d\n", cnt);
  }
  
  return 0;
}

0